2017-09-18 19 views
0

我的问题场景与this one几乎相同,但我绘制的表格具有更复杂绑定的TD单元,每个绑定都是唯一的该列被绑定。有时它只是HTML的独特之处。原因当使用临时节点绑定时,根据对列模型的更改重新绘制数据列的敲击输出

换句话说,使用databind=foreach对列进行循环并且仅仅嵌套执行text绑定的<TD>是不够好的。

我可以让我的桌子上呈现初始页面抽奖,使用template{nodes:xxx}结合,在那里我通过DOM数组节点..像这样:

<table> 
     <thead> 
      <tr> 
       <!-- ko foreach: ColumnModel.VisibleColumns --> 
       <th data-bind="click:$root.ColumnModel.ColumnSortClick,text:ColName"></th> 
       <!-- /ko --> 
      </tr> 
     </thead> 
     <tbody> 
      <!-- ko template: { nodes: ColumnModel.getRowTmplNodes(), foreach: DataItems} --> 
      <!-- /ko --> 
     </tbody> 
    </table> 

的文档指出DOM节点你传递给这个变量不允许成为observableArray。因此,正如您可以想象的那样,当我允许用户更新列模型时,只有我的标题标签在THEAD>中发生更改,但数据列不更新。

我该怎么办?

+0

好吧,我找到了一种方法,使这项工作,并从使用'template'绑定切换到自定义绑定处理程序[感谢Michael Best](https://groups.google.c om/forum /#!searchin/knockoutjs/template $ 20nodes%7Csort:relevance/knockoutjs/dsikE_EAzjo/zGKuaB3thvYJ) – bkwdesign

+0

您可以发表该答案并接受它。 – Nisarg

回答

1

通过使用自定义的淘汰赛结合解决described originally here by Michael Best

HTML:

<table> 
    <thead> 
     <tr> 
     <!-- ko foreach: ColumnModel.VisibleColumns --> 
      <th data-bind="click:$root.ColumnModel.Column_Click" style="cursor:pointer;"><span data-bind="visible:SortDirection,css:IconClass" style="font-size:small"></span><span data-bind="text:ColName"></span></th> 
     <!-- /ko --> 
     </tr> 
    </thead> 
    <tbody data-bind="foreach:{data:DataItems,as:'thg'}"> 
     <tr data-bind="nodes: $root.ColumnModel.getRowTemplate()"></tr>     
    </tbody> 
</table> 

KO绑定:

//THANK YOU, MICHAEL BEST: 
ko.bindingHandlers.nodes = { 
    init: function() { 
    return {controlsDescendantBindings: true}; 
    }, 
    update: function (element, valueAccessor, allBindings, viewModel, bindingContext) { 
    var nodes = ko.unwrap(valueAccessor()); 
    ko.virtualElements.setDomNodeChildren(element, nodes); 
    ko.applyBindingsToDescendants(bindingContext, element); 
    } 
}; 
ko.virtualElements.allowedBindings.nodes = true; 
相关问题