gpt4 book ai didi

javascript - 当我需要阻塞调用时如何处理 Ember 中的异步属性?

转载 作者:行者123 更新时间:2023-11-29 10:43:44 24 4
gpt4 key购买 nike

我们使用的模型带有 hasMany 和嵌入式子项。这很好,所以每当我调用 model.get('children') 时一切正常。

我们现在已将该子属性更改为 async:true,但我似乎无法找到有关如何处理此问题的适当文档。

让我举个例子。为了简单起见,我将使用简化的 json 来表示我的 Ember 设置。

假设我有一个这样的模型:

model:{
hasMany: {children: {async: true} },
isActive: boolean
}

假设我有一个这样的模板:

{{#if lastChildIsActive}}
<p>I'm the last one!</p>
{{/if}}

我有一个 Controller :

controller:{
lastChildIsActive: function(){
return this.get('model').get('children').get('lastObject').get('isActive')
}
}

好的,所以在使用 async: false 时使用此设置,一切正常。

但是现在,如果异步为真,在 Controller 中调用 .get('children') 有时不会返回任何内容,因为我猜它是异步的。

现在我可以使用 promises,并将我的 Controller 重构为:

controller:{
lastChildIsActive: function(){
this.get('model').get('children').then(function(children){

return children.get('lastObject').get('isActive');

});
}
}

第二个重构的问题是,我不再返回 isActive 值,我现在返回 promise 对象。

但是模板不需要 promise ,它需要返回值。

那么,我怎样才能确保异步已加载,同时能够返回调用的实际结果而不是 promise ?

最佳答案

通过使用 View 和 didInsertElement,您可以获得父级的子级,然后更新 Controller 上的属性,这将出现在您的模板中。

App.IndexView = Ember.View.extend({
didInsertElement: function() {
controller = this.get('controller');
controller.get('model').get('children').then(function(children){
active = children.get('lastObject').get('active');
controller.set('lastChildIsActive', active);
});
}
});

请参阅此 fiddle :http://jsfiddle.net/f9DAc/2/

关于javascript - 当我需要阻塞调用时如何处理 Ember 中的异步属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23780919/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com