Как узнать, что атрибут, переданный компоненту, изменил Ember?

У меня есть компонент в Ember, например

 {{some-setup-section
      processingOfId=processingOfId
      savingActivitySetUp=savingActivitySetUp
      editingActivitySetUp=editingActivitySetUp}}

и в моем js-файле компонентов

didUpdateAttrs() {
 this.updateDataOnChange();
 this._super(...arguments);}

Я использую didUpdateAttrs, чтобы узнать, когда какой-либо атрибут изменился. В моем случае мне нужно выполнить функцию только тогда, когда processingOfId изменились. Есть ли какой-нибудь метод, подобный this.attrs('processingOfId').didChanged(), который поможет мне решить мою проблему.

Я попытался

didUpdateAttrs({oldAttr, newAttr}) 

и проверьте, имеет ли значение oldAttr.someAttrs !== newAttr.someAttrs, но в консоли он говорит, что ember не поощряет передачу таких атрибутов, и скоро он будет устаревшим. Могу ли я как-то решить этот сценарий

Подводя итог, можно ли узнать, какой атрибут обновляется в методе 'didUpdateAttrs' внутри компонента


person ArunBabuVijayanath    schedule 13.12.2017    source источник


Ответы (1)


Нет встроенного способа,

  1. Мы должны сделать это сами, как показано ниже,

См. этот RFC для получения дополнительной информации.

Ember.Component.extend({
  didUpdateAttrs() {
    let oldCoordinates = this.get('_previousCoordinates');
    let newCoordinates = this.get('coordinates');

    if (oldCoordinates && oldCoordinates !== newCoordinates) {
      this.map.move({ from: oldCoordinates, to: newCoordinates });
    }

    this.set('_previousCoordinates', newCoordinates);
  }
});
  1. Вы можете использовать дополнение ember-diff-attrs.
    import diffAttrs from 'ember-diff-attrs';

    export default Ember.Component.extend({
      didReceiveAttrs: diffAttrs('email', 'isAdmin', function(changedAttrs, ...args) {
        this._super(...args);

        if(changedAttrs && changedAttrs.email) {
          let oldEmail = changedAttrs.email[0],
              newEmail = changedAttrs.email[1];
          // Do stuff
        }
      })
    });

Несколько быстрых заметок:

  • Ловушка-функция, предоставляемая diffAttrs, будет вызываться всегда, даже если отслеживаемый атрибут не изменяется.
  • changeAttrs будет нулевым при первом вызове.

См. README дополнения для использования

person Ember Freak    schedule 13.12.2017