gpt4 book ai didi

javascript - 在 Ember 中,如何在修改 ArrayController 内容后更新 View ?

转载 作者:行者123 更新时间:2023-11-30 06:32:36 25 4
gpt4 key购买 nike

我刚刚开始使用 ember,所以如果这个问题看起来很愚蠢,请原谅我。我有一个 ArrayController,其中包含具有属性名称的人员列表。我正在使用以下 handlebars 调用为内容数组中的每个名称创建文本字段:

{{#each App.Controller}}
{{view Em.TextField placeholder="Name" valueBinding="name" }}
{{/each}}

这是按预期工作的。我首先用几个名称初始化我的内容数组,每个条目都会出现一个文本字段。但是,当我使用 pushObject 将一个人添加到内容数组时,不会添加新的文本字段!使用控制台我可以看到人们正在添加到内容中, View 根本没有改变。更奇怪的是,如果我按以下方式添加人员,一切都会按预期进行:

this.pushObject(newPerson);
var copy = this.get('content');
this.set('content',[]);
this.set('content',copy);

当我以这种方式添加人员时,我会为新添加的人员获得另一个文本字段。 ember 文档说 pushObject() 是 KVO 兼容的,这是否意味着它应该更新依赖项并且 View 应该更新?我是否需要调用 rerender() 或其他函数来使 pushObject() 更新 View ,或者每次我想更新 View 时都必须复制数组?谢谢!

最佳答案

所以我想通了这个问题。在 Controller 的初始化函数中,我只是像这样向内容数组添加元素

App.Controller = Em.ArrayController.create({
content: [],

init: function(){
this.insertNew();
},


insertNew: function(){
var t = App.Person.create({
name:"test"
});
this.pushObject(t);
},

});

这段代码在调用 insertNew 时没有改变 View (尽管初始化有效)。通过将 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);
},

});

我原以为第一个content:[]行的意思是以后不用再设置content了,但是好像初始化数组的时候又得重新设置。

关于javascript - 在 Ember 中,如何在修改 ArrayController 内容后更新 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16642194/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com