私の脳を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()
、オブジェクトごとにループが呼び出されていることが明らかです。ただし、コントローラーは決して変更されません.. runningconsole.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
が使用されると予想される方法ではありませんか?