У меня есть сложный объект, который я оборачиваю в 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, чтобы каждый из подписчиков получал не только последнее значение, но и эту дополнительную информацию?
Да, я знаю, что это не так. И я тоже изучил этот плагин для картографии. Я просто пытался увидеть, есть ли способ передать дополнительные данные при установке наблюдаемого значения, чтобы данные можно было распространить на обратные вызовы.
Не могли бы вы уточнить, почему вам нужно отправлять дополнительные данные при обновлении наблюдаемого? Если это просто объект, добавьте новое свойство к данным и сохраните изменения в объекте, нет необходимости отправлять «лишние» данные при обновлении наблюдаемого . Если вы уже можете получить «лишние» данные, нет причин, по которым их нельзя просто добавлять к объекту каждый раз, когда вы его обновляете. Затем все, что вам нужно сделать, это прочитать свойство myObj (). UpdatedFields или как вы его называете.






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