Аурелия: уведомление, когда ЛЮБОЕ свойство изменено - PullRequest
0 голосов
/ 08 ноября 2018

Видите ли вы какой-нибудь способ узнать, когда свойство ЛЮБОЙ модели было изменено посредством привязки? Мне нужно что-то общее, потому что оно будет применяться ко всем формам приложения. Это означает, что я не могу просто иметь наблюдаемый обратный вызов 'property’Changed () для всех свойств моделей. Я думаю о способах переопределения установщиков свойств, созданных механизмом привязки, чтобы они могли вызывать один определенный обратный вызов, но я чувствую, что может быть лучший способ.

Ответы [ 2 ]

0 голосов
/ 09 ноября 2018

Хорошо, я просто использовал механизм привязки для наблюдения за изменениями всех свойств. Это позволило мне реализовать проверки isDirty без изменения существующих моделей ...

Итак, окончательный код выглядит так:

Object.getOwnPropertyNames(obj).forEach(p => {
        this.subscriptions.push(this.binding.propertyObserver(obj, p)
           .subscribe(() => this.updateDirty()));
    });
Метод

my updateDirty () вызывается после каждого изменения свойства, и для модели не требуется никаких изменений.

Если кто-то может предложить лучшее решение, я все еще заинтересован, но пока что это соответствует моим потребностям.

0 голосов
/ 08 ноября 2018

Я создал плагин aurelia для такого сценария (и не только). Это не совсем то, что вы просите, но может помочь вам. потому что плагин создаст единственное свойство с именем isDirty, которое вы можете наблюдать и соответственно запускать свой код.

https://github.com/avrahamcool/aleph1-aurelia-utilities

посмотрите на Dirty Tracking a model: секцию

класс вашей модели должен расширять базовый класс, предоставляемый плагином. Теперь вы можете украсить любые свойства вашей модели с помощью Декоратор @dirtyTrack ().

для пользователей Babel: назначение в объявлении установит значение по умолчанию для свойства. для пользователей TS: вы должны позвонить декоратор с параметром @dirtyTrack (7) someInt: number;

это установит переменную isDirty в вашей модели. это свойство будет автоматически обновляться при каждом изменении отслеживаемого свойства.

В любой момент вы можете вызвать saveChanges () для вашей модели, чтобы зафиксировать текущие изменения. или discardChanges (), чтобы вернуться к последнему сохраненному точка. Вы можете вызвать serialize (), чтобы получить объект pojo из вашей модели, или десериализовать (pojo) для заполнения вашей модели из объекта pojo.

...