とにかく、特定の関数を呼び出すすべてのプロパティ変更をサブスクライブするようにノックアウトマッピングプラグインに指示できますか?
次の方法で、プロパティ変更イベントを手動でサブスクライブできることに気付きました。
var viewModel = {
name: ko.observable('foo'),
}
// subscribe manually here
viewModel.name.subscribe(function(newValue){
// do work
})
ただし、ビューモデルが異なる可能性があるため、プロパティ名をハードコーディングしたくないので、一般的にサブスクライブできるようにしたいと思います。これを行う関数を作成しましたが、最善のアプローチではない可能性があります。IE7以下を除くすべてのブラウザで動作します。
ここでは、ビューモデルを引数として取り、プロパティをサブスクライブしてそれを反映しようとします。
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;
}
私が言ったように、これは機能しますが、マッピングプラグインを使用しているので、プロパティの変更を一般的にサブスクライブする関数を提供するために使用できるフックがあることを期待していました。
何かのようなもの:
mapping = {
create: function(options){
options.data.subscribe(function(newValue){
// do work ???
});
}
}
ko.mapping.fromJS(viewModel, mapping);
何か案は?