5

Ember JS 配列の更新がビューに反映されません。

コントローラ

App.MyController = Ember.ArrayController.extend({
  results: [],
  init: function(){
    _this = this
    App.MyModel.find({}).then(function(contents) {
      obj1 = contents.objectAt(0)
      obj1.get('data').hasMany.results.forEach(function(item){
          _this.results.push(item)
      });
    })
    //rest of the code
  }
})

テンプレート

{{#each results}}
  // show items of reults.
{{/each}}

これは、サーバーからデータをフェッチしているコードの一部であり、ロード時に結果配列にプッシュしています。サーバーからのデータのロードには時間がかかるため、テンプレートは空の結果配列にマップされます。理想的には、結果配列はテンプレート内のものを更新する必要がありますが、論理的にはそうすべきではありません。

私が行方不明になっている場所を知っている人はいますか?または間違っている。

前もって感謝します。

4

2 に答える 2

17

バインディングを機能させるには、pushObjectの代わりに使用する必要がありpushます。

App.MyController = Ember.ArrayController.extend({
  results: [],
  init: function(){
    _this = this;
    App.MyModel.find({}).then(function(contents) {
      obj1 = contents.objectAt(0);
      obj1.get('data').hasMany.results.forEach(function(item){
        _this.results.pushObject(item)
      });
    })
    //rest of the code
  }
});

ember 配列の詳細については、こちらpushObjectを参照してください。

それが役に立てば幸い。

于 2013-06-21T20:44:46.887 に答える
1

同様の問題がありました。問題は、配列の変更が Ember に通知されないことです。この場合、標準の Push を置き換え、フレームワークに変更を通知する特別な Ember 関数 (pushObject) があります。ただし、それ以外の場合 (Array.splice など) にはそのような関数がないため、フレームワークに手動で通知する必要があります。これは次の方法で実行できます。

this.notifyPropertyChange('array');
于 2017-07-27T13:58:27.000 に答える