我正在尝试在我的viewmodel中为我的所有可观察对象添加扩展器。我的数据来自服务器,因此我无法逐个指定属性。
我尝试了这个,但它没有用,我正在使用来自淘汰赛js网页的logChange扩展器这个例子。
var addingExtender = {
key: function (data) {
return data.id;
},
create: function(options) {
return ko.observable(true).extend({ logChange: "Value Changed" });
}
};
ko.mapping.fromJS(data, addingExtender, self);
答案 0 :(得分:3)
我最终做了一个逐个添加扩展器的功能。
function addStorage(koViewModel,name) {
for (var observableKey in koViewModel) {
if (ko.isObservable(koViewModel[observableKey])
&& !isObservableArray(koViewModel[observableKey])) {
koViewModel[observableKey].extend({ persist: name === undefined ?
url + observableKey : url + name + "." + observableKey });
}
if (typeof koViewModel[observableKey] === "object") {
for (var observables in koViewModel[observableKey]) {
if (ko.isObservable(koViewModel[observableKey][observables])
&& !isObservableArray(koViewModel[observableKey][observables])) {
koViewModel[observableKey][observables].extend({ persist: url +
observableKey + "." + observables });
}
}
}
}
}
答案 1 :(得分:0)
使用打字稿语法,递归扩展叶子可观察对象
extendObservables(vm: object): void {
for (var observableKey in vm) {
if (!vm.hasOwnProperty(observableKey) || observableKey == "__ko_mapping__") {
continue;
}
if (ko.isObservable(vm[observableKey]) && typeof ko.unwrap(vm[observableKey]) === "object") {
this.extendObservables(ko.unwrap(vm[observableKey]));
} else if (ko.isObservable(vm[observableKey])) {
extendObservable(vm[observableKey]);
} else if (typeof vm[observableKey] === "object") {
this.extendObservables(vm[observableKey]);
}
}
}