0

在我的 Ember 控制器中,每当配置更改时,我都会使用延迟加载来获取额外的数据。因此,我想延迟绑定的执行,直到加载所有依赖的数据。我认为返回一个 false 值作为 setter 结果将阻止绑定执行,但绑定仍然执行。如何延迟绑定执行直到加载完成?

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

无法按照您的意愿阻止绑定执行。我处理这个问题的方法是拥有两个独立的属性;设置一个,并观察它以更新第二个,并绑定到第二个。像这样的东西:

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 回答