【问题标题】:EmberJs - Computed Properties and TemplateEmberJs - 计算属性和模板
【发布时间】:2016-11-20 10:58:04
【问题描述】:

问题是我无法正确显示我对 ember 属性所做的更改。

下面是动作:

toggle_favorites: function() {
      var favorite = this.get('some_service').get("favorites");
      this.set("favorite", favorite);
      if (favorite.length > 0) {
        this.set("hasFavorites", true);
      }
     // show some feedback, irrelevant
    },

之后我只是将所有内容显示为列表

{{#each favorite}} ...

问题是,如果我继续向列表中添加内容,更改将不会反映在 hbs 文件中。

我尝试使用如下计算属性

  favs: Ember.computed("hasFavorites", "some_service.favorites", "favorite.length", function() {
      return this.get("favorite");
  }).property('@favorite.length'),

并显示它,但无济于事。 如果我将某些内容添加到列表中,然后触发我的操作,它会成功,但不会显示每个顺序添加。

我使用的是 Ember 2.6。

【问题讨论】:

  • 也许你能提供一个不工作的ember-twiddle

标签: javascript ember.js


【解决方案1】:

我有一些奇怪的修复

我正在使用

  this.set("favorite", null);
  this.set("favorite", favorite);

favs: Ember.computed("favorite.[]", function() {
    return this.get("favorite");
  }),

将最喜欢的属性设置为 null,似乎可以解决问题,尽管我无法理解它。

【讨论】:

    【解决方案2】:

    @Rentoni,使用favorite.lengthfavorite.@each.someprop 试试

    favs: Ember.computed("favorite.length", function() {
       return this.get("favorite");
    }),
    

    favs: Ember.computed("favorite.@each.someprop", function() {
       return this.get("favorite");
    }),
    

    【讨论】: