1

meteor での abt DOM 操作について知りたいです。私のコードは次のようになります。

    <template name = "studentList">

    {{#each}}
        <div class = "name">
            Name: {{this.name}}
        </div>

        <div class = "age">
            Age: {{this.age}}
        </div>
        <button class = "edit"> Edit </button>
    {{/each}}

    <button class = "addStudent"> Add Student </button>
</template>


Template.studentList.helpers({
    studentlist:function(){
        return Students.find();
    }
});

Template.studentList.events({
    //I am doing the DOM manupulation here based on the buttons clicked
});

DB から Student Info の一覧を取得し、テンプレートに表示します。現在、生徒ごとに編集ボタンがあります。ユーザーがこの編集ボタンをクリックすると、学生の「名前」と「年齢」フィールドをテキストフィールドとして変更し、「保存」と「キャンセル」のオプションを提供したいと考えています。

同様に、テンプレートの最後に「生徒を追加」ボタンがあります。ユーザーがクリックすると、学生の名前と年齢が追加されて保存されるフォームを表示したいと思います。

これまでのところ、私はこれを行うことができますが、studentList のイベントで多くの Jquery/Javascript コードを使用するという非常に単純な方法です。これは正しい方法ではないという多くの投稿を読みました。

とにかく、流星でこの機能をどのように実現できるか教えてください。または、それを行ういくつかの可能な方法に。

助けていただければ幸いです。

4

1 に答える 1

1

これは、これを達成するための可能な方法です。

これを段階的に実行してみましょう

まず、これが のHTML外観です。

{{#if  editName}} <!-- editName template helper -->
   <!-- If the Session is equal to true this part of the html will be showed -->
    <input type="text" class="newName" value="{{this.name}}" />
  {{else}}
    <!-- this is what we show by default on the view, if user click the div, the input will be showed -->
    <div class="name">Name: {{this.name}} </div>
{{/if}}

JS .

ヘルパーは次のようになります。

Template.studentList.helpers({tName:function(){
      return Session.get("studentName" + this._id); //getting the session true or false.
    }
});

そしてイベント。

Template.studentList.events({
  'click .name' : function(event,template){
     //On this event we are Setting the Session to true and holding the id of the student
     return Session.set("studentName" + this._id,true)
   },
   'keypress .newName':function(event,template){
      //Some keypress to update the value 
       //using http://docs.meteor.com/#/full/template_$ to get the value using meteor
       var newNameStudent = template.$('.newName').val();
       if(event.keyCode == 13){ //if enter lets update the value
           Students.update({_id:this._id},{$set:{name:newNameStudent}})
           return Session.set("studentName" + this._id,false) //setting to false the session to hide the input and show the <div>
         }
     },
     'click .cancel':function(){
        return Session.set("studentName" + this._id,false) //setting to false the session to hide the input and show the <div>
       }
  })

コードが多すぎないことがわかった場合 (おそらく)、セッションを使用して単純な CRUD 操作を行う方法がわかります。

この作業例のMeteorpadを作成しました。確認してください。

于 2015-04-09T04:38:11.430 に答える