knockout.js 如何在挖空视图模型中为每个可观察对象添加一个扩展器?

jaql4c8m  于 2022-11-10  发布在  其他
关注(0)|答案(2)|浏览(173)

我试图在我的视图模型中添加一个扩展器到我所有的可观察对象。我的数据来自服务器,所以我不能一个一个地指定属性。
我尝试了这个,但它不工作,我使用的logChange扩展程序从knockout js网页为这个例子。

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);
rseugnpd

rseugnpd1#

我最后做了一个函数来逐个添加扩展器。

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 });
                }
            }
        }
    }
}
inb24sb2

inb24sb22#

使用Typescript语法,递归扩展叶可观察对象

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]);
        }
    }
}

相关问题