Ember.js、set()和computed属性

w8f9ii69  于 12个月前  发布在  其他
关注(0)|答案(2)|浏览(138)

我正在阅读set()方法的Ember.js API reference,但我不理解其中的一段。
计算属性
如果你试图在一个定义了计算属性处理程序的键上设置一个值(参见get()方法的例子),那么set()将调用该方法,传递值和键,而不是简单地改变值本身。当您需要实现由一个或多个成员属性组成的属性时,这很有用。
我理解set()是如何独立工作的,但是设置计算属性(函数)仍然没有点击,即使在阅读了这一段之后。
有没有人可以给予额外的解释或例子?

bxpogfeg

bxpogfeg1#

您可以阅读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'),那么它将通过传递值也就是Yehuda Katz来调用计算属性fullNameCPwithGetSetset方法,以便我们可以为依赖键设置确切的值。

8qgya5xd

8qgya5xd2#

在某些情况下,a.set(b, c)不会触发计算值。所以我们可以使用set(a, b, c)
a = yourObject,b =要修改的属性,c =值

相关问题