无论如何我可以告诉淘汰映射插件订阅所有属性更改调用某个函数吗?
我意识到我可以通过这种方式手动订阅属性更改事件:
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);
有任何想法吗?