是否有一种方法可以动态添加 'td with data-bind:"text: propertyName"' 而无需显式编写属性名称,如下所示?:
<table>
<tbody data-bind="template: {name: 'Tmpl', foreach:person}">
</tbody>
<script id="Tmpl" type="text/html">
<tr class="tableRow">
<td data-bind="text: Name"></td>
<td data-bind="text: Age"></td>
</tr>
</script>
</table>
我的“person”数据源可以有不同的属性名称和不同数量的 td,因此它非常动态。我尝试的是:
<table>
<tbody data-bind="template: {name: 'Tmpl', foreach: person}">
</tbody>
<script id="assessmentTmpl" type="text/html">
<tr class="tableRow">
<td data-bind="text: $data"></td>
</tr>
</script>
</table>
但这只给出了对象本身,而不是属性。我试图通过仅使用 Knockout.js 来做到这一点,但我可能需要使用 jquery 动态添加 td。
最佳答案
如有疑问,请尝试自定义绑定(bind)!
<table>
<tbody data-bind="template: {name: 'Tmpl', foreach:person, as : per}">
</tbody>
<script id="Tmpl" type="text/html">
<tr class="tableRow" data-bind="createRow: per">
</tr>
</script>
</table>
ko.bindingHandlers.createRow =
{
update: function(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext)
{
for(var item in valueAccessor())
{
$(element).append('<td data-bind="text:' + valueAccessor()[item] + '"></td>');
});
}
};
我认为这会起作用,如果数据绑定(bind)不正确,您可以自己在该更新方法中输出值:
$(element).append('<td>' + valueAccessor()[item] + '</td>');
关于jquery - 使用knockout.js动态添加 'td'和绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15209958/