我刚开始使用余烬,如果这个问题看起来很糟糕,请原谅我。我有一个ArrayController,它包含具有属性名称的人员列表。我正在使用以下手柄调用为内容数组中的每个名称创建文本字段:
{{#each App.Controller}}
{{view Em.TextField placeholder="Name" valueBinding="name" }}
{{/each}}
这是按预期工作的。我首先使用多个名称初始化我的内容数组,并为每个条目显示一个文本字段。但是,当我使用pushObject将人员添加到内容数组时,不会添加新的文本字段!使用控制台我可以看到人们被添加到内容中,视图根本不会改变。更奇怪的是,如果我按以下方式添加人员,一切都按预期工作:
this.pushObject(newPerson);
var copy = this.get('content');
this.set('content',[]);
this.set('content',copy);
当我以这种方式添加人物时,我会为新添加的人获得另一个文本字段。 ember文档说pushObject()符合KVO,这是否意味着它应该更新依赖项并且视图应该更新?我是否需要调用rerender()或其他函数来使pushObject()更新视图,或者每次要更新视图时是否必须复制数组?谢谢!
答案 0 :(得分:0)
所以我想出了这个问题。在我的Controller的init函数中,我只是像这样添加元素到内容数组
App.Controller = Em.ArrayController.create({
content: [],
init: function(){
this.insertNew();
},
insertNew: function(){
var t = App.Person.create({
name:"test"
});
this.pushObject(t);
},
});
调用insertNew时,此代码未更改视图(尽管初始化有效)。通过将this.set(“content”,[])添加到我的init函数中,insertNew的行为符合预期。这是工作代码:
App.Controller = Em.ArrayController.create({
content: [],
init: function(){
this.set("content",[]);
this.insertNew();
},
insertNew: function(){
var t = App.Person.create({
name:"test"
});
this.pushObject(t);
},
});
我曾想过第一个内容:[]行意味着我以后不需要再次设置内容,但似乎在初始化数组时你必须再次设置它。
答案 1 :(得分:0)
我遇到类似的问题,当我使用this.pushObject
添加新项目时,只有在项目是第一个对象时,视图才会更新。
后来我尝试使用this.insertAt
,它运行良好,没有任何问题。