让我的大脑缠绕在emberjs身上.尝试创建一个控制器,从一个返回JSON数组的webservice调用中加载对象:
(注意,这是从coffeescript生成的javascript)
MTM.Trade.controller = Ember.ArrayController.create({
loadAll: function() {
var self;
self = this;
this.set('content', []); /* fails with or without this line*/
return $.getJSON('http://localhost:8080/webservice/trades', function(data) {
var jsonTrade, trade, _i, _len;
console.log("Length = " + data.length);
for (_i = 0, _len = data.length; _i < _len; _i++) {
jsonTrade = data[_i];
trade = MTM.Trade.create(jsonTrade);
self.pushObject(trade);
}
console.log("Everything pushed");
});
}
});
Run Code Online (Sandbox Code Playgroud)
在调用时MTM.Trade.controller.loadAll(),显然正在为每个对象调用循环.但是我的控制器永远不会改变..运行console.log MTM.Trade.controller.get('content')返回一个空白数组
我知道ember-rest和ember-data存在,但是现在我正在自己学习如何自己做这些事情,并且稍后会迁移到这些框架.
UPDATE
感谢这篇文章,我确实得到了我的问题的答案..我需要初始化我的数组:
MTM.Trade.controller = Ember.ArrayController.create({
init: function() {
this._super();
return this.set('content', Ember.A());
},
loadAll: function() {
...
Run Code Online (Sandbox Code Playgroud)
所以现在我的问题是,为什么?直觉上ArrayController初始化者不应该这样做吗?也许这不是ArrayController预期使用的方式?
在更新之前,我发表了一条评论,告诉您在创建时初始化内容(因此在创建的哈希中)。
MTM.Trade.controller = Ember.ArrayController.create({
content: [],
//...
});
Run Code Online (Sandbox Code Playgroud)
但后来我看到你在 loadAll 函数中设置content为。[]所以我认为初始化是不必要的。
从最接近的角度来看ArrayController,它只是 mixin 的扩展ArrayProxy(即:接口类型),因此在创建 an 实例时ArrayController,必须定义该content属性。
| 归档时间: |
|
| 查看次数: |
3307 次 |
| 最近记录: |