ember.js pushObject未推送

ember.js pushObject未推送,ember.js,Ember.js,让我的大脑被余烬缠绕。尝试创建从返回JSON数组的webservice调用加载对象的控制器: (注意,这是从coffeescript生成的javascript) MTM.Trade.controller=Ember.ArrayController.create({ loadAll:function(){ var-self; self=这个; 此.set('content',[]);/*无论是否有此行都会失败*/ 返回$.getJSON('http://localhost:8080/webserv

让我的大脑被余烬缠绕。尝试创建从返回JSON数组的webservice调用加载对象的控制器:

(注意,这是从coffeescript生成的javascript)

MTM.Trade.controller=Ember.ArrayController.create({
loadAll:function(){
var-self;
self=这个;
此.set('content',[]);/*无论是否有此行都会失败*/
返回$.getJSON('http://localhost:8080/webservice/trades,函数(数据){
var jsonTrade,trade,i,len;
console.log(“Length=“+data.Length”);
对于(_i=0,_len=data.length;_i<_len;_i++){
jsonTrade=data[_i];
trade=MTM.trade.create(jsonTrade);
自我推销对象(贸易);
}
log(“所有推送的内容”);
});
}
});
调用
MTM.Trade.controller.loadAll()
时,很明显每个对象都在调用循环。然而,我的控制器从不改变。。运行
console.log MTM.Trade.controller.get('content')
返回一个空白数组

我知道余烬rest和余烬数据是存在的,但现在我正在学习如何自己做这些事情,稍后将迁移到这些框架

更新

多亏了你,我才得到了我问题的答案。。我需要初始化数组,如下所示:

MTM.Trade.controller=Ember.ArrayController.create({
init:function(){
这个;
返回此.set('content',Ember.A());
},
loadAll:function(){
...

所以现在我的问题是,为什么?
ArrayController
初始值设定项不应该处理这个问题吗?也许这不是预期使用
ArrayController
的方式?

在更新之前,我放了一条注释,告诉您在创建时初始化内容(所以在create的散列中)

MTM.Trade.controller=Ember.ArrayController.create({
内容:[],
//...
});
但是后来我看到您在loadAll函数中将
内容设置为
[]
,所以我认为初始化是不必要的


当看得离
ArrayController
最近时,它只是
ArrayProxy
mixin的一个扩展(即:各种接口),因此,在创建
ArrayController的实例时,必须定义
content
属性。

Thx sly。在我看来,由于这是一个常见的用例,ArrayController将稍微超出简单地扩展ArrayProxy并实例化自身的范围。也许我会提出一个pull请求。也许你可以。但我发现了什么相反,ArrayProxy可以包装任何类型的类似数组的对象。我认为这种行为将被保留,但可能在创建时,如果用户未定义
content
属性,那么它只需设置为
[]
。另一种解决方案可能是显式抛出一个错误,告诉用户他必须定义ArrayProxy(以及ArrayController)的
内容
属性,因为ArrayProxy是一个混合体,我不想在那里做更改,但我同意ArrayController应该明确地将内容设置为[]如果没有显式设置。是的,我同意不对mixin进行更改,而是对实现类进行更改,在本例中,在ArrayController.FYI中,这里将进一步详细讨论这一点: