我对 EmberJS 很陌生。我正在尝试渲染一个简单的 hasMany 建模。
我的应用程序应该为多人处理多项任务。
首先,我有模型:
App.Task = Em.Object.extend({
name: null
});
App.Person = Em.Object.extend({
firstname: null,
lastname: null,
avatar: null,
tasks:null,
});
一个人可以有多项任务。所以我的personsController 是这样工作的:
App.personsController = Em.ArrayController.create({
content: [],
tasks:[],
addPerson: function(){
var aPerson = App.Person.create({
firstname: this.firstname,
lastname : this.lastname,
avatar : this.avatar,
});
this.pushObject( aPerson );
}
我的任务控制器,它将处理任务作业:
App.tasksController = Em.ArrayController.create({
content:[],
contentBinding: "App.personsController.tasks",
name:'',
removeTask: function(e){
this.removeObject( e.context );
},
addTask: function(e){
this.pushObject( App.Task.create({"name":this.name}) );
}
});
contentBiding
似乎是这里的关键之一。我希望它自动绑定到我正在处理的人的任务。
在视图方面,只使用我的 Handlebars 模板:
<script type="text/x-handlebars">
{{view Em.TextField valueBinding="App.personsController.firstname" placeholder="firstname" }}
{{view Em.TextField valueBinding="App.personsController.lastname" placeholder="lastname" }}
<button {{action "addPerson" target="App.personsController"}} class="btn btn-primary" >Ajouter un developpeur</button>
{{#each App.personsController}}
<div>
<h3>{{firstname}}{{lastname}}</h3>
{{view Em.TextField valueBinding="App.tasksController.name"}}
<button {{action "addTask" target="App.tasksController"}} >Add a task</button>
{{#each App.tasksController}}
{{view Em.TextField valueBinding="name" }}
<button {{action "removeTask" target="App.tasksController"}} >x</button>
{{/each}}
</div>
{{/each}}
</script>
所以,当我添加一个新人时,一切正常。但是如果我添加一个任务,该任务会添加到视图中每个人的任务上。
恐怕我犯了一个概念上的错误,我找不到关于这种可视化的好的文档。我见过 hasMany 与 ember.data 的关系的例子,但我想首先正确理解这里发生了什么。