我有一个Ember.js应用程序,其中包含一个带有轮播的模板,其中包含可滚动的“活动”列表。我正在使用计算属性来过滤并返回一组活动,然后我将其用于绑定到我的模板,该模板填充轮播。提供集合的计算属性如下所示:
// simplified for clarity
activities: function () {
var model = this.get('model.content');
model.sort(function (a, b) {
return (a.get('type') > b.get('type') ? 1 : -1;
}.bind(this);
return model;
}.property('model', 'controllers.browse.filter')
每次controllers.browse.filter属性发生更改时,都会重新计算活动的计算属性,并将新的过滤条件应用于模型,这样可以顺利运行。
但是,在返回新过滤的模型后,我需要'重新绑定'我的轮播。现在,我正试图用这样的观察者做到这一点:
reloadCarousel: function () {
// pseudo code, not important to problem
carousel.reload();
}.observes('activities')
问题是,只要活动属性开始更改,reloadCarousel就会运行,这意味着活动属性没有时间完成并在触发reloadCarousel观察者之前返回新的模型集合。这不起作用,因为我的轮播无法绑定到新过滤的模型。
我搜索了Ember.js文档,但找不到任何允许我等到计算属性完全结束并将所有相关数据返回到我的模板的内容。
非常感谢任何建议或想法!
答案 0 :(得分:0)
get方法返回一个promise,您可以等待实现,然后设置活动:
this.get('model.content').then(function(model) {
var activities = model.sort(function (a, b) {
return (a.get('type') > b.get('type') ? 1 : -1;
});
// set activities
});