DOM 操纵流星
DOM manupulation in 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
});
我从数据库中获取学生信息列表并将它们显示在模板中。现在对于每个学生,都有一个编辑按钮。当用户单击此编辑按钮时,我想将学生的 "name" 和 "age" 字段更改为文本字段,并为 "save" 和 "cancel" 提供一个选项。
同样,我在模板末尾有一个 "add student" 按钮。当用户单击它时,我想显示一个表单,其中添加并保存学生的姓名和年龄。
到目前为止,我能够做到这一点,但是通过在 studentList 的事件中使用大量 Jquery/Javascript 代码以一种非常幼稚的方式。我读了很多 post 说这不是正确的方法。
无论如何请告诉我如何在流星中实现这个功能。或者只是一些可能的方法。
感谢帮助。
这是实现此目的的可能方法。
让我们尝试这样做一步一步
首先,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这个工作示例,检查它。
我想知道 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
});
我从数据库中获取学生信息列表并将它们显示在模板中。现在对于每个学生,都有一个编辑按钮。当用户单击此编辑按钮时,我想将学生的 "name" 和 "age" 字段更改为文本字段,并为 "save" 和 "cancel" 提供一个选项。
同样,我在模板末尾有一个 "add student" 按钮。当用户单击它时,我想显示一个表单,其中添加并保存学生的姓名和年龄。
到目前为止,我能够做到这一点,但是通过在 studentList 的事件中使用大量 Jquery/Javascript 代码以一种非常幼稚的方式。我读了很多 post 说这不是正确的方法。
无论如何请告诉我如何在流星中实现这个功能。或者只是一些可能的方法。
感谢帮助。
这是实现此目的的可能方法。
让我们尝试这样做一步一步
首先,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这个工作示例,检查它。