Наблюдаемый нокаут - передача дополнительных данных в обратном вызове?

У меня есть сложный объект, который я оборачиваю в KnockoutObservable, поэтому различные области кода могут подписываться и получать уведомления при изменении этого объекта. Например:

var myObj: KnockoutObservable<MyObj> = ko.observable(null).extend({ notify: 'always' });
...
// other code
myObj.subscribe(function(myObj: MyObj) {
    // myObj changed
});
...
myObj(myObjNew);

Однако в идеале я хотел бы передать всем наблюдателям дополнительный объект с некоторыми подробностями о том, что именно изменилось в сложном объекте. Например:

var myObj: KnockoutObservable<MyObj> = ko.observable(null).extend({ notify: 'always' });
...
// other code
myObj.subscribe(function(myObj: MyObj, changed: any) {
    if (changed.field1) {
        // myObj.field1 changed
    }
});
...
myObj(myObjNew, { field1: 'a'});

Есть ли способ передать дополнительную информацию, подобную этой, при установке KnockoutObservable, чтобы каждый из подписчиков получал не только последнее значение, но и эту дополнительную информацию?

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

user3297291 28.11.2018 17:02

Да, я знаю, что это не так. И я тоже изучил этот плагин для картографии. Я просто пытался увидеть, есть ли способ передать дополнительные данные при установке наблюдаемого значения, чтобы данные можно было распространить на обратные вызовы.

Steve 28.11.2018 17:45

Не могли бы вы уточнить, почему вам нужно отправлять дополнительные данные при обновлении наблюдаемого? Если это просто объект, добавьте новое свойство к данным и сохраните изменения в объекте, нет необходимости отправлять «лишние» данные при обновлении наблюдаемого . Если вы уже можете получить «лишние» данные, нет причин, по которым их нельзя просто добавлять к объекту каждый раз, когда вы его обновляете. Затем все, что вам нужно сделать, это прочитать свойство myObj (). UpdatedFields или как вы его называете.

Budhead2004 04.12.2018 16:14
Зод: сила проверки и преобразования данных
Зод: сила проверки и преобразования данных
Сегодня я хочу познакомить вас с библиотекой Zod и раскрыть некоторые ее особенности, например, возможности валидации и трансформации данных, а также...
Как заставить Remix работать с Mantine и Cloudflare Pages/Workers
Как заставить Remix работать с Mantine и Cloudflare Pages/Workers
Мне нравится библиотека Mantine Component , но заставить ее работать без проблем с Remix бывает непросто.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
TypeScript против JavaScript
TypeScript против JavaScript
TypeScript vs JavaScript - в чем различия и какой из них выбрать?
Синхронизация localStorage в масштабах всего приложения с помощью пользовательского реактивного хука useLocalStorage
Синхронизация localStorage в масштабах всего приложения с помощью пользовательского реактивного хука useLocalStorage
Не все нужно хранить на стороне сервера. Иногда все, что вам нужно, это постоянное хранилище на стороне клиента для хранения уникальных для клиента...
Что такое ленивая загрузка в Angular и как ее применять
Что такое ленивая загрузка в Angular и как ее применять
Ленивая загрузка - это техника, используемая в Angular для повышения производительности приложения путем загрузки модулей только тогда, когда они...
0
3
83
0

Другие вопросы по теме