我有一个组件在我使用observes
时会抛出错误,但在property
计算属性中使用displayPages
时却没有:
App.ExampleComponent = Ember.Component.extend({
tagName : 'ul',
classNames : [ 'pagination' ],
current : 1,
modelName : null,
meta : null,
actions : {
next : function() {
var current = this.get('current');
this.set('current', parseInt(current, 10) + 1);
},
previous : function() {
var current = this.get('current');
this.set('current', parseInt(current, 10) - 1);
}
},
updateMeta : function() {
this.set('meta', new Number(Math.random()));
}.observes('current').on('init'),
currentPage : function() {
return Number(this.get('current'));
}.property('current'),
displayPages : function() {
// complex logic lives here, so I used "observes" instead of "property"
console.log('Im invoked the first time meta is set, but not on subsequent changes');
var result = [];
return result;
}.property('meta')
});
如果我更改observes
并使用property
,则可以正常使用。但是displayPages
属性包含复杂的逻辑,所以我想根据文档指南使用observes
:
http://emberjs.com/guides/object-model/what-do-i-use-when/
如果我替换.property('meta')
并将其替换为.observes('meta')
,则会收到以下错误:
Uncaught Error: Assertion Failed: ArrayProxy expects an Array or Ember.ArrayProxy, but you passed function
问题是...... 为什么会这样?
我不认为我理解observes
和property
之间的差异,但在这种情况下阅读文档并没有多大帮助..
答案 0 :(得分:0)
计算属性返回一个值。观察值在值发生变化时触发函数。换句话说,观察不会返回值。
你可能正在尝试迭代你的观察方法,而Ember正在大喊大叫,我期待一个数组以便迭代,你传给我一个函数。
示例显示:http://emberjs.jsbin.com/tariliya/1/edit
您应该使用计算属性。每次依赖属性更改时它都会更新。