【问题标题】:Ember.js, set(), and computed propertiesEmber.js、set() 和计算属性
【发布时间】:2017-12-18 14:46:08
【问题描述】:

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

计算属性

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

我了解set() 是如何独立工作的,但是即使在阅读了本段之后,设置计算属性(函数)仍然无法点击。

谁能提供更多解释或示例?

【问题讨论】:

    标签: javascript ember.js computed-properties


    【解决方案1】:

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

    【讨论】:

    • 当您说“之后它将被视为普通财产”时,您究竟是什么意思?有什么例子可以检查行为吗?什么时候会发生这种情况?
    • 另外,使用 Ember.set(a, b,c) 有同样的效果吗?
    • 这意味着,当您为没有getter的计算属性设置值时,这意味着如果有任何依赖属性更改,它将不会重新计算。
    • Also, does using Ember.set(a, b,c) have the same effect - 是的,Ember.setthis.set 相同。
    猜你喜欢
    • 2013-11-29
    • 2013-06-29
    • 2020-12-10
    • 2012-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-15
    • 1970-01-01
    相关资源
    最近更新 更多