Ember.js, set() и вычисляемые свойства

Я просматриваю API Ember.js ссылка на метод set(), и я не понимаю один конкретный абзац.

Вычисленные свойства

Если вы попытаетесь установить значение для ключа, для которого определен обработчик вычисляемого свойства (см. пример метода get()), то set() вызовет этот метод, передав и значение, и ключ вместо простого изменения значения. сам. Это полезно в тех случаях, когда вам нужно реализовать свойство, состоящее из одного или нескольких свойств-членов.

Я понимаю, как set() работает независимо, но установка вычисляемых свойств (функция) все равно не щелкает, даже после прочтения этого абзаца.

Может ли кто-нибудь дать дополнительное объяснение или пример?


person qarthandso    schedule 13.07.2017    source источник


Ответы (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 новое значение вручную. если вы хотите это сделать, вам нужно определить свойство Computed с помощью Getter и Setter, например fullNameCPwithGetSet.

если мы скажем this.set('fullNameCPwithGetSet','Yehuda Katz'), то он вызовет set метод вычисляемого свойства fullNameCPwithGetSet, также передав значение, т. е. Yehuda Katz, чтобы мы могли установить точное значение для зависимого ключа.

person Ember Freak    schedule 13.07.2017
comment
Когда вы говорите, что после этого оно будет считаться обычным имуществом, что именно вы имеете в виду? Любой пример для проверки поведения? В какой момент это происходит? - person copenndthagen; 31.03.2018
comment
Кроме того, имеет ли тот же эффект использование Ember.set(a, b,c)? - person copenndthagen; 31.03.2018
comment
Это означает, что когда вы устанавливаете значение для вычисляемого свойства, у которого нет геттеров, это означает, что оно не будет пересчитано, если произойдет какое-либо изменение зависимого свойства. - person Ember Freak; 01.04.2018
comment
Also, does using Ember.set(a, b,c) have the same effect - Да, Ember.set и this.set одинаковы. - person Ember Freak; 01.04.2018