.property(...)在Emberjs做了什么?

时间:2014-08-18 05:19:58

标签: ember.js

我一直在阅读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的参数的意义是什么?

1 个答案:

答案 0 :(得分:2)

.property()Ember.computed()的缩写版。阐述你的例子

fullName: function() {
    return this.get('firstName') + ' ' + this.get('lastName');
   }.property('firstName', 'lastName')
});

所以基本上如果你没有putup .property(),它将是一个简单的方法,在连接后返回完整的名称。但是无论何时调用方法,它都会一直执行。但是如果添加.property() [基本上是计算属性],则值会被缓存并避免多次执行。

如果firstNamelastName发生更改,您可能需要更新缓存中的fullName值。这就是我们将.property()内的参数作为.property('firstName', 'lastName')传递的原因。这基本上是观察者的概念。因此,基本上在您编写的第二个代码中,您可能认为它正常工作,但当firstNamelastName发生更改时,fullName将不会被更改,因为它正在观察名为{{的变量1}},Captain而非AmericafirstName