1

我有一個包含數組數組的JSON結構。我有一個View Model,它定義了包含Observable數據的Observable Arrays的對象,然後將這些對象嵌套在其他Arrays和Observables中。數據綁定與Knockoutjs嵌套的JSON

加載包含可觀察數據的嵌套Observable Arrays的View模型的最簡單方法是什麼?

例子: http://jsfiddle.net/uyQb6/1/

回答

3

你可以探索使用映射插件,但該選項對象將變得複雜,因爲每個創建回調將不得不再次調用映射插件,然後添加任何dependentObservables,它會更容易使所有的屬性可觀察。

雖然你可以堅持使用你的構造函數,並使用類似於ko.utils.arrayMap的東西,它只是一個簡單的函數,它循環訪問一個數組,並將每個項目重新映射到從您提供的函數返回的任何項目。

下面是添加了ko.utils.arrayMap呼叫您的樣品: http://jsfiddle.net/rniemeyer/VUfSS/

+0

是的,我在http:// www的博客上找到[這篇文章](http://www.knockmeout.net/2011/04/utility-functions-in-knockoutjs.html)後開始走這條路。 .knockmeout.net,但我不知道是否有更好的方法。謝謝! – Homer 2012-02-01 14:00:02

0

更新:如果你的嵌套列表是依靠主列表上,這是你的解決方案,否則,@ RP-尼邁耶的解決方案是最好的。

如果我得到了它的權利,可以說你有JSON數據是這樣的:

{ 
    appId: 1, 
    appName: 'my app 1', 
    modules:[ 
     {module1:1, moduleName: 'module 1'}, {module1:2, moduleName: 'module 2'}] 
}, 
{ 
    appId: 2, 
    appName: 'my app2', 
    modules:[ 
     {module1:3, moduleName: 'module 3'}, {module1:4, moduleName: 'module 4'}] 
} 

這將是您的視圖模型:

function myViewModel(){ 
    var self = this; 
    self.appList = ko.observableArray(data); 
    self.moduleList = ko.observableArray([]); 

    // Set selectedApp in order to fill modulesList 
    self.selectedApp = ko.observable(); 
    self.selectedApp.subscribe(function(v){ 
     // updates module list whenever selected app gets value. 
     moduleList(v.modules); 
    }); 
} 

我沒有測試它,但我確定你有這個想法。