KnockoutJS подписаться на изменения свойств с плагином Mapping
Есть ли в любом случае я могу сказать плагину отображения нокаута, чтобы подписаться на все изменения свойств вызова определенной функции?
Я понимаю, что могу вручную подписаться на событие изменения свойства следующим образом:
<code>var viewModel = { name: ko.observable('foo'), } // subscribe manually here viewModel.name.subscribe(function(newValue){ // do work }) </code>
Я хотел бы иметь возможность подписки общего характера, поскольку мои модели представлений могут различаться, я не хочу жестко кодировать имена свойств. Я создал функцию, которая делает это, но это может быть не лучшим подходом. Он работает во всех браузерах, кроме IE7 и ниже.
Здесь я принимаю viewmodel в качестве аргумента и пытаюсь отразить его подписку на свойства:
<code>function subscribeToKO(data) { $.each(data, function (property, value) { if (getType(value) == "Object") data[property] = subscribeToKO(value); else if (getType(value) == "Array") { $.each(value, function (index, item) { item = subscribeToKO(item); }); } else { if (value.subscribe) { value.subscribe(function (newValue) { // do work }); } } }); return data; } </code>
Как я уже говорил, это работает, но так как я использую маппинг, я надеялся, что есть хук, который я мог бы использовать, чтобы предоставить ему функцию, которая будет в общем случае подписываться на изменения свойств.
Что-то вроде:
<code>mapping = { create: function(options){ options.data.subscribe(function(newValue){ // do work ??? }); } } ko.mapping.fromJS(viewModel, mapping); </code>
Есть идеи?