Ember.js:属性更改时未调用Controller属性

时间:2014-09-02 16:23:07

标签: javascript ember.js

我有一个动态控制器属性,如果关系计数低于5,则返回布尔值

alienCountBelow5: function() {
  return this.get('model').get('aliens').content.length < 5;
}.property('aliens'),

但即使我已指定它应监视aliens的更改,但当我向关系添加新记录时它不会改变。

这是模型:

App.Item = DS.Model.extend({
  name: DS.attr(),
  aliens: DS.hasMany('alien')
});

我在创建新记录时在pushObject对象上使用aliens

我不确定应该怎么做,显然我没有正确地做到这一点。

演示:http://emberjs.jsbin.com/yegiku/2/edit

2 个答案:

答案 0 :(得分:1)

应在alienCountBelow5内定义

App.Item计算属性。并将模板更改为{{item.alienCountBelow5}}。我已更新了您的jsfiddle

注意:遗憾的是我无法使其正常工作,它会抛出错误:Cannot read property 'resolve' of undefined。它应该工作,因为它与此answer相同。但你应该明白这个想法并解决问题。如果你使用

aliens: DS.hasMany('alien', {async: true})它有点工作。

答案 1 :(得分:0)

查看the docs for @each - 这是一个特殊的关键字,可以观察到数组的特定更改。

在您的情况下,使用以下方法将起作用(观察者仅在记录添加从数组中移除时才会触发):

alienCountBelow5: function() {
  return this.get('model').get('aliens.length') < 5;
}.property('aliens.[]'),