2016-08-08 2 views
1

Ни один из предыдущих вопросов, которые я видел здесь, по-видимому, не охватывал тему использования Ember Computed Property и Ember Observer. Я понимаю, что Computed Property использует предыдущие атрибуты для создания нового атрибута и обновляется в цикле выполнения.Ember Computed Property vs Ember Observer

Person = Ember.Object.extend({ 
    // these will be supplied by `create` 
    firstName: null, 
    lastName: null, 

    fullName: Ember.computed('firstName', 'lastName', function() { 
    return `${this.get('firstName')} ${this.get('lastName')}`; 
    }) 
}); 

Наблюдатель с другой стороны обновляется вне цикла выполнения, и может смотреть что-либо даже компьютерная собственность. Он реагирует на любые изменения.

Person = Ember.Object.extend({ 
    // these will be supplied by `create` 
    firstName: null, 
    lastName: null, 

    fullName: Ember.computed('firstName', 'lastName', function() { 
    return `${this.get('firstName')} ${this.get('lastName')}`; 
    }), 

    fullNameChanged: Ember.observer('fullName', function() { 
    // deal with the change 
    console.log(`fullName changed to: ${this.get('fullName')}`); 
    }) 
}); 

В документации Ember указано, что наблюдатели обычно используют. Может ли кто-нибудь дать лучший пример правильного использования наблюдателей? Что еще они могут наблюдать, и каковы последствия неправильного использования и правильного использования?

Исходный код можно найти на Ember документации: https://guides.emberjs.com/v2.3.0/object-model/observers/

ответ

3

компьютерной недвижимости использует предыдущие атрибуты, чтобы помочь создать новый атрибут и обновляется в цикле выполнения

Да, но лениво - измерение только при ссылках, и изменение их зависимостей лишило кешированное значение.

В документации Ember указано, что наблюдатели обычно используют.

Да, наблюдатели стреляют синхронно всякий раз, когда наблюдаемое свойство изменяется, даже если причина заключается в том, чтобы пересчитать то, что не будет использоваться. Использование наблюдателей для того, что должно быть вычисленным, является одним из классических анти-шаблонов Ember.

Я проверил несколько крупных приложений, над которыми работал, и нашел наблюдателей, которые использовались для таких вещей, как при необходимости, при необходимости, использовать какую-то стороннюю библиотеку, когда что-то изменилось, или изменив язык приложения, когда был выбран новый язык интерфейса.

+0

@toruzaburo «Использование наблюдателей за то, что должно быть вычислено, является одним из классических анти-шаблонов Ember». Таким образом, пример злоупотребления этим был бы наблюдателем, подсчитывающим количество элементов в магазине, когда вычисленное свойство могло бы это сделать? – Taztingo

Смежные вопросы