Ember.js,set()和计算属性

时间:2017-07-13 17:06:42

标签: javascript ember.js computed-properties

我正在阅读set()方法的Ember.js API reference,而我并不了解某个特定段落。

  

计算属性

     

如果尝试在具有计算属性的键上设置值   处理程序定义(参见示例的get()方法),然后set()将   调用该方法,传递值和键而不是简单   改变价值本身。这对你来说很有用   需要实现由一个或多个成员组成的属性   属性。

我理解set()如何独立工作,但设置计算属性(函数)仍然没有点击,即使在阅读本段后也是如此。

有人可以提供额外的解释或示例吗?

1 个答案:

答案 0 :(得分:3)

您可以阅读https://guides.emberjs.com/v2.14.0/object-model/computed-properties/#toc_setting-computed-properties以便更好地理解。

在这里,我只想解释同样的事情。

import Ember from 'ember';
export default Ember.Component.extend({
    firstName: '',
    lastName: '',
    fullNameCP: Ember.computed('firstName', 'lastName', function() {
        return `${this.get('firstName')} ${this.get('lastName')}`
    }),
    fullNameCPwithGetSet: Ember.computed('firstName', 'lastName', {
        get(key) {
            return `${this.get('firstName')} ${this.get('lastName')}`;
        },
        set(key, value) {
            let [firstName, lastName] = value.split(/\s+/);
            this.set('firstName', firstName);
            this.set('lastName', lastName);
            return value;
        }
    })
});

在上面,
如果我们说this.set('fullNameCP','Yehuda Katz')之后它将被视为普通属性,它将不会被视为计算属性。您不应手动将fullNameCP设置为新值。如果你想这样做,那么你需要使用Getter和Setter定义Computed属性,如fullNameCPwithGetSet

如果我们说this.set('fullNameCPwithGetSet','Yehuda Katz'),那么它会通过传递值来调用计算属性set的{​​{1}}方法,即。fullNameCPwithGetSet,以便我们可以设置确切的依赖键的值。