我有一个类似这样的架构:
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计算属性的误解是什么?
谢谢
通过使用this.get('quantity'),inner.get('count')你告诉它它依赖于什么.每次调用.get('count')该函数时都会关闭并获取这些属性的当前值,从而返回最新结果.
.property()当您将计算的属性计数绑定到其他内容(例如视图)时,该部分将起作用.当您这样做时,对数量进行更改将自动重新计算计数,并且此新值将传播到您绑定计数的任何值.
你可以在这里看到不同的行动:http://jsfiddle.net/tomwhatmore/6gz8x/
| 归档时间: |
|
| 查看次数: |
1636 次 |
| 最近记录: |