2013-04-17 41 views
4

我想創建一個樹形結構表。我有json的行數組。一行可以有其他子行。Jquery Knockout for/while循環模板

[ 
    { 
     "Name": "Row 1", 
     "Depth": 1, 
     "Rows": [{ "Name": "Row 1.1", "Depth": 2, "Rows": [] }] 
    }, 
    { 
     "Name":" Row 2", 
     "Depth": 1, 
     "Rows": [] 
    } 
] 

模板我有一個行(不工作)看起來是這樣的:

<script type="text/html" id="row-template"> 
    <tr> 
     {{ for(var i = 1; i<= Depth; i++) { }} 
      <td class='col'></td> 
     {{/for}} 

     <td data-bind="text: Name"></td> 
    </tr> 
</script> 

是否有利用基因敲除模板中重複的語句,所以我可以添加額外的n的任何方式我需要每列的列?

+0

有你看着http://stackoverflow.com/questions/11509324/recursive-tr-with-knockout-js-and-jquery-template?rq=1似乎與你想要的相似。 –

+0

解決了嵌套模板問題,但不是我需要的:( – Catalin

回答

1

我認爲,在MVVM的觀點中,你是過度熟練的標記; 所以,我的建議是:爲什麼你不定義一個從viewModel返回元素數組的計算器?

例如, 視圖模型

function MyViewModel() { 
    var self = this; 

    self.Depth= ko.observable(10); 


    self.DepthRepeated= ko.computed(function(){ 
     var ret = []; 
     for(var i =0; i<self.Depth(); i++) 
     ret.push(i);//note: very dirty way to create/populate an array!..but it's just for PoC 

     return ret; 

    }); 
} 

HTML:

<div data-bind="foreach: DepthRepeated"></div> 

(當然,在HTML部分我都插入一個div,你會插入TD/TR)

+0

這實際上是一個非常好的主意,它解決了問題。 – Catalin