我们使用hasMany模型和嵌入子元素。这很好,所以无论何时我称为model.get('children'),一切都正常。如何在需要阻止呼叫时处理Ember中的异步属性?
我们现在已经将这个children属性更改为async:true,并且我似乎无法找到有关如何处理此问题的适当文档。
让我给你举个例子。为简单起见,我将使用简化的json来表示我的Ember设置。
说我有一个模式这样的:
model:{
hasMany: {children: {async: true} },
isActive: boolean
}
说我有一个模板这样的:
{{#if lastChildIsActive}}
<p>I'm the last one!</p>
{{/if}}
而且我有一个控制器:
controller:{
lastChildIsActive: function(){
return this.get('model').get('children').get('lastObject').get('isActive')
}
}
好的,所以在使用async:false时的设置中,一切都正常。
但是现在,使用async true,在.get('children')控制器中调用SOMETIMES只是不返回任何内容,因为它是异步我猜。
现在我可以使用的承诺,并重构我的控制器,以这样的:
controller:{
lastChildIsActive: function(){
this.get('model').get('children').then(function(children){
return children.get('lastObject').get('isActive');
});
}
}
与第二重构的问题是,我不再返回isActive值,我现在回来了承诺对象。
但模板不需要承诺,它需要返回值。
不能你把观察者就可以了,然后当值可用模板更新? – Sukima