0

私の Ember コントローラーでは、構成が変更されるたびに遅延読み込みを使用して追加のデータを取得しています。したがって、依存するすべてのデータがロードされるまで、バインディングの実行を遅らせたいと考えています。セッターの結果としてfalse値を返すとバインディングの実行が妨げられると思いましたが、バインディングは引き続き実行されます。読み込みが完了するまでバインディングの実行を遅らせるにはどうすればよいですか?

App.ConfigController = Ember.ArrayController.extend({
   currentConfiguration: null,

   configuration: function(key, value){
     if(arguments.length === 1){
         return this.get('currentConfiguration');
     }
     var self = this;
     // load additional data 
        this.loadData(id, function(data){
                            self.set('currentConfiguration', value);
                            return value;
                           })
     }
     return false;
   }.property('currentConfiguration'),

    loadData: function(id, resultHandler, faultHandler){
       var self = this;
       var uri = 'http://foo.com/+id;

       $.getJSON(uri)
        .success(function(data, status, jqXHR){
            resultHandler(data);
        })
        .error(faultHandler);
    },

});
4

1 に答える 1

1

必要に応じてバインディングの実行を防ぐ方法はありません。私がこれに取り組む方法は、2つの別々のプロパティを持つことです。1つを設定し、それを観察して2つ目を更新し、2つ目にバインドします。このようなもの:

App.ConfigController = Ember.ArrayController.extend({
  configuration: null, // <- set this property
  configurationDidChange: function(){
    var self = this;
    // load additional data 
    this.loadData(id, function(data){
                        self.set('configurationData', value);
                       });
  }.observes('configuration'),
  configurationData: null <- bind to this property

  loadData: function(id, resultHandler, faultHandler){
    // ... as you have it 
  }
});
于 2012-10-20T03:45:10.167 に答える