Events 防止在getter/setter中执行绑定
在我的Ember控制器中,每当配置发生更改时,我都使用延迟加载来获取额外的数据。因此,我想延迟绑定的执行,直到加载所有依赖的数据。我认为返回一个假值作为setters结果将阻止绑定的执行,但绑定仍然执行。如何将绑定执行延迟到加载完成Events 防止在getter/setter中执行绑定,events,ember.js,Events,Ember.js,在我的Ember控制器中,每当配置发生更改时,我都使用延迟加载来获取额外的数据。因此,我想延迟绑定的执行,直到加载所有依赖的数据。我认为返回一个假值作为setters结果将阻止绑定的执行,但绑定仍然执行。如何将绑定执行延迟到加载完成 App.ConfigController = Ember.ArrayController.extend({ currentConfiguration: null, configuration: function(key, value){ if
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可以相互绑定的属性。要将属性更改转化为事件,需要使用观察者。设计是内部一致的,我的观点是,在属性设置器的定义中引入某种东西,以某种方式阻止绑定执行,会增加不必要的复杂性。