2014-07-27 37 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> 

下一次更新,将会有一个新的数据地图功能,将提供一种替代方法。一旦可用,我可能会更新这个答案。