我一直在阅读Emberjs的文档。我遇到了名为computed property
的主题。我已经浏览了那里的每一个字,然而传递给.property()
的论点没有任何意义。
从文档中获取第一个例子。
App.Person = Ember.Object.extend({
// these will be supplied by `create`
firstName: null,
lastName: null,
fullName: function() {
return this.get('firstName') + ' ' + this.get('lastName');
}.property('firstName', 'lastName')
});
var ironMan = App.Person.create({
firstName: "Tony",
lastName: "Stark"
});
ironMan.get('fullName'); // "Tony Stark"
根据文件
请注意,fullName函数调用property。这声明函数是一个计算属性,参数告诉Ember它依赖于firstName和lastName属性。
只是为了检查传递给arguments
的{{1}}的重要性,我修改了它们。
.property()
fullName: function() {
return this.get('firstName') + ' ' + this.get('lastName');
}.property('Captain', 'America')
});
返回ironMan.get('fullName')
。
所以最后一个问题是,传递给Tony Stark
的参数的意义是什么?
答案 0 :(得分:2)
.property()
是Ember.computed()
的缩写版。阐述你的例子
fullName: function() {
return this.get('firstName') + ' ' + this.get('lastName');
}.property('firstName', 'lastName')
});
所以基本上如果你没有putup .property()
,它将是一个简单的方法,在连接后返回完整的名称。但是无论何时调用方法,它都会一直执行。但是如果添加.property()
[基本上是计算属性],则值会被缓存并避免多次执行。
如果firstName
或lastName
发生更改,您可能需要更新缓存中的fullName值。这就是我们将.property()
内的参数作为.property('firstName', 'lastName')
传递的原因。这基本上是观察者的概念。因此,基本上在您编写的第二个代码中,您可能认为它正常工作,但当firstName
或lastName
发生更改时,fullName
将不会被更改,因为它正在观察名为{{的变量1}},Captain
而非America
,firstName
。