Ember'观察'抛出断言错误,而计算属性不?

时间:2014-07-16 00:30:42

标签: javascript ember.js

我有一个组件在我使用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

问题是...... 为什么会这样?

我不认为我理解observesproperty之间的差异,但在这种情况下阅读文档并没有多大帮助..

1 个答案:

答案 0 :(得分:0)

计算属性返回一个值。观察值在值发生变化时触发函数。换句话说,观察不会返回值。

你可能正在尝试迭代你的观察方法,而Ember正在大喊大叫,我期待一个数组以便迭代,你传给我一个函数。

示例显示:http://emberjs.jsbin.com/tariliya/1/edit

您应该使用计算属性。每次依赖属性更改时它都会更新。