我正在尝试向我的视图模型中的所有可观察对象添加扩展器。我的数据来自服务器,所以我无法一一指定属性。
我尝试过此操作,但没有用,在此示例中,我使用的是敲除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);
我最终做了一个添加扩展器的功能。
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 });
}
}
}
}
}
使用打字稿语法,递归扩展叶可观察对象
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]);
}
}
}