【问题标题】:Ember.js - run observer after computed property has completedEmber.js - 在计算属性完成后运行观察者
【发布时间】:2015-05-11 00:50:45
【问题描述】:

我有一个 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 文档,但找不到任何可以让我等待计算属性完全完成并将所有相关数据返回到我的模板的内容。

非常感谢任何建议或想法!

【问题讨论】:

    标签: ember.js


    【解决方案1】:

    get 方法返回一个承诺,您可以等待它完成,然后设置活动:

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

    【讨论】:

      猜你喜欢
      • 2016-12-30
      • 1970-01-01
      • 2016-04-22
      • 2023-03-16
      • 1970-01-01
      • 2013-10-21
      • 2016-12-28
      • 2020-11-20
      • 2017-04-25
      相关资源
      最近更新 更多