Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Events 防止在getter/setter中执行绑定_Events_Ember.js - Fatal编程技术网

Events 防止在getter/setter中执行绑定

Events 防止在getter/setter中执行绑定,events,ember.js,Events,Ember.js,在我的Ember控制器中,每当配置发生更改时,我都使用延迟加载来获取额外的数据。因此,我想延迟绑定的执行,直到加载所有依赖的数据。我认为返回一个假值作为setters结果将阻止绑定的执行,但绑定仍然执行。如何将绑定执行延迟到加载完成 App.ConfigController = Ember.ArrayController.extend({ currentConfiguration: null, configuration: function(key, value){ if

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

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);
    },

});

没有办法阻止您希望的绑定执行。我的方法是拥有两个独立的属性;设置一个,观察它以更新第二个,并绑定到第二个。大概是这样的:

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 
  }
});
App.ConfigController=Ember.ArrayController.extend({

配置:null,//谢谢您的回复!使用某种逻辑来阻止绑定执行不是很有用吗?因为绑定被表示为对象,所以可以将它们视为提供prevendDefault方法的普通JS-events。@Franatique您将属性视为事件,但它们的设计目的更多的是将属性视为pr可以相互绑定的属性。要将属性更改转化为事件,需要使用观察者。设计是内部一致的,我的观点是,在属性设置器的定义中引入某种东西,以某种方式阻止绑定执行,会增加不必要的复杂性。