为什么即使我没有指定其依赖项,计算属性也会更新?

Asf*_*azi 2 ember.js

我有一个类似这样的架构:

App = {};

App.Outer = Ember.Object.extend({
    inner: null,
    quantity: 0,

    count: function () {
        var self = this, inner = self.get('inner');
        return self.get('quantity') * inner.get('count');
    }.property('nothing')
});

App.Inner = Ember.Object.extend({
    count: 0
});
Run Code Online (Sandbox Code Playgroud)

是的,'count'计算属性确实设置为依赖于完全不存在的属性'nothing'.但无论如何它似乎都得到了更新:

var o1 = App.Outer.create({
    quantity: 2,
    inner: App.Inner.create({count: 4})
});

console.log(o1.get('count')); // => 8
o1.get('inner').set('count', 5);
console.log(o1.get('count')); // => 10
o1.set('inner', App.Inner.create({count: 10}));
console.log(o1.get('count')); // => 20
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?它知道在没有我告诉它依赖什么的情况下更新什么...不可能是对的,可以吗?我对Ember计算属性的误解是什么?

谢谢

Tom*_*ore 7

通过使用this.get('quantity'),inner.get('count')你告诉它它依赖于什么.每次调用.get('count')该函数时都会关闭并获取这些属性的当前值,从而返回最新结果.

.property()当您将计算的属性计数绑定到其他内容(例如视图)时,该部分将起作用.当您这样做时,对数量进行更改将自动重新计算计数,并且此新值将传播到您绑定计数的任何值.

你可以在这里看到不同的行动:http://jsfiddle.net/tomwhatmore/6gz8x/