从逻辑的角度来看,不应该ConvertToDataTable
绑定在桌子本身上,而不是在foreach
?
另外,您不应该通过绑定或视图模型来控制表布局吗?自定义绑定对于硬编码值来说是一个非常糟糕的地方。
Anyway, controlsDescendantBindings
是你的朋友 (docs http://knockoutjs.com/documentation/custom-bindings-controlling-descendant-bindings.html):
自定义绑定:
ko.bindingHandlers.dataTable = {
init: function () {
return { controlsDescendantBindings: true };
},
update: function (element, valueAccessor, allBindings, viewModel, bindingContext) {
var layout = valueAccessor();
ko.applyBindingsToDescendants(bindingContext, element);
$(element).dataTable({ "sDom": layout });
}
};
查看型号:
{
dataTableLayout: "<'row'<'span6'l><'span6'f>r>t<'row'<'span6'i><'span6'p>>",
tasks: ko.observableArray([/* ... */])
}
模板:
<table data-bind="dataTable: dataTableLayout">
<thead>
<tr>
<td>Task Name</td>
<td>Task Description</td>
</tr>
</thead>
<tbody data-bind="foreach: tasks">
<tr>
<td data-bind="text: Name"></td>
<td data-bind="text: Details"></td>
</tr>
</tbody>
</table>
http://jsfiddle.net/WcaM5/ http://jsfiddle.net/WcaM5/
免责声明:我不知道 jQuery DataTables 到底是如何工作的,所以示例是aircode。我想说的是,如果有必要,您可以手动控制绑定。