jquery - 使用knockout.js动态添加 'td'和绑定(bind)

标签 jquery asp.net-mvc knockout.js

是否有一种方法可以动态添加 '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/

相关文章:

javascript - 扩大 Canvas 以适应以下 div

javascript - 如何确定回发与javascript 和asp.net mvc?

javascript - 追踪 knockout 事件

javascript - 使用自定义绑定(bind)更新元素文本

Knockout.js 不会获取自动完成或预填充的值

javascript - jQueryUI 对话框提交处理程序的参数来自哪里?

javascript - 在不知道替换的 id 或 src 的情况下更改 img 标签的 src

jquery - 多个同步动画的多个级联

asp.net-mvc - 从 Razor 声明性 View 使用 MVC HtmlHelper 扩展

c# - IIS - 线程池设置 machine.config 与 web.config