2013-04-03 17 views
0

我想添加一個擴展器到我的viewmodel中的所有可觀察對象。我的數據來自服務器,所以我無法一一指定屬性。如何在淘汰賽視圖模型中爲每個observable添加擴展器?

我試過這個,但它沒有工作,我在這個例子中使用了從knockout 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); 
+1

Look @ http://stackoverflow.com/questions/11325352 – beauXjames

回答

2

我最終做了一個函數來逐個添加擴展器。

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