2014-07-27 62 views
0

我想用列數組來創建顯示哪些列,但我希望能夠使用鏈接,但像下面這樣使用鏈接不會使用obeservable更新的setProperty。jsviews表動態列

我現在最終做的是首先根據列集合生成模板並使用該模板生成表格。

所以我想知道有一種方法可以在單個模板中執行此操作嗎?

<table id="test"><tbody></tbody></table> 
<script> 
    var columns = [{field:"Id"}, {field:"Name"}]; 
    var data = {rows:[{Id:1, Name:"a", Bla:"bla"},{Id:2, Name:"b", Bla:"bla"}]}; 
    var tmpl = "{^{for rows}}<tr>{^{for ~columns}}<td>{^{:#parent.parent.data[field]}}</td>{{/for}}</tr>{{/for}}"; 

    $.templates(tmpl).link("#test tbody", data, { columns: columns }); 

    var d = $.view($("#test tbody tr")[0]).data; 
    $.observable(d).setProperty("Name", "c"); 
</script> 
+0

有幾種方法可以做到這一點。但隨着JsViews的下一次更新,您將能夠使用DataMaps以特別強大/優雅的方式解決這個問題。我打算很快回到這裏。 – BorisMoore

回答

0

這裏有一個方法,你可以使用:

<table id="test"><tbody></tbody></table> 

<script type="text/x-jsrender" id="tmpl"> 
    {^{for rows}} 
     <tr> 
      {^{props}} 
       {{if ~inColumns(key)}} 
        <td>{^{:prop}}</td> 
        <td><input data-link="prop"/></td> 
       {{/if}} 
      {{/props}} 
     </tr> 
    {{/for}} 
</script> 

<script> 
    var columns = ["Id", "Name"]; 

    var data = { 
     rows:[{Id:1, Name:"a", Bla:"bla"},{Id:2, Name:"b", Bla:"bla"}] 
    }; 

    $.templates("#tmpl").link("#test tbody", data, { 
     inColumns: function(key) { 
      return $.inArray(key, columns) !== -1; 
     } 
    }); 

    var d = $.view($("#test tbody tr")[0]).data; 

    $.observable(d).setProperty("Name", "c"); 
</script> 

下一次更新,將會有一個新的數據地圖功能,將提供一種替代方法。一旦可用,我可能會更新這個答案。