让我的大脑围绕着 emberjs。尝试创建一个控制器,该控制器从返回 JSON 数组的 Web 服务调用加载对象:
(请注意,这是从 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");
});
}
});
在调用MTM.Trade.controller.loadAll()
时,很明显正在为每个对象调用循环。但是我的控制器永远不会改变..运行console.log MTM.Trade.controller.get('content')
返回一个空白数组。
我知道 ember-rest 和 ember-data 存在,但现在我正在自己动手学习如何自己做这些事情,稍后将迁移到这些框架。
更新
感谢这篇文章,我确实得到了我的问题的答案。我需要这样初始化我的数组:
MTM.Trade.controller = Ember.ArrayController.create({
init: function() {
this._super();
return this.set('content', Ember.A());
},
loadAll: function() {
...
所以现在我的问题是,为什么?直觉上不应该ArrayController
初始化器处理这个吗?也许这不是ArrayController
预期的使用方式?