【问题标题】:Knockout Binding with Virtual Elements Not Working虚拟元素的淘汰赛绑定不起作用
【发布时间】:2013-11-10 02:59:10
【问题描述】:

我正在处理一些自定义绑定,其中一个我希望能够从一些字符串数组中显示一个表格。

fiddle

我将其简化为这个自定义绑定:

ko.bindingHandlers.table = {
    init: function tableBinding(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {

        element.innerHTML = tableTemplate;

        var innerBindingContext = bindingContext.createChildContext(valueAccessor());

        ko.applyBindingsToDescendants(innerBindingContext, element);

        return {
            controlsDescendantBindings: true
        };
    }
};

这是模板的内容:

<!-- if: head && head.length -->
<thead>
<tr data-bind="foreach: head">
    <th data-bind="text: $rawData">not working th</th>
</tr>
</thead>
<!-- /ko -->

<tbody data-bind="foreach: rows">
<tr data-bind="foreach: $data">
    <td data-bind="text: $data">not working td</td>
</tr>
</tbody>

还有一些示例数据。

ko.applyBindings({
    table: {
        head: ["Name", "Position"],
        rows: [
            ["John", "Janitor"],
            ["Mike", "IT"],
            ["Paul", "HR"],
            ["Rick", "Coffee Fetcher"]
        ]
    }
});

我使用的是 Knockout 3.0,但是任何适用于 Knockout 2.x 的东西也可以在这里使用。如果您查看小提琴,&lt;thead&gt; 部分显示正确,但主体的绑定却没有。如果我内联模板并使用with 绑定(如with: table),它可以正常工作。

【问题讨论】:

    标签: javascript knockout.js custom-binding bindinghandlers


    【解决方案1】:

    我必须承认,目前我并没有关注你在这里所做的一切,但我可​​以告诉你,如果你的 if 语句使用 ko if: 而不仅仅是 if:,你的示例将起作用。

    http://jsfiddle.net/AhLzS/1/

    所以不要这样:

    <!-- if: head && head.length -->
    

    去吧:

    <!-- ko if: head && head.length -->
    

    无容器绑定语法需要&lt;!-- ko ... --&gt; ... &lt;!-- /ko --&gt; 作为虚拟容器。因此,如果一个 html 注释语法只有 &lt;!-- if ... --&gt;,则敲除不会做任何特别的事情。

    来自“if”绑定的淘汰文档:
    http://knockoutjs.com/documentation/if-binding.html

    &lt;!-- ko --&gt;&lt;!-- /ko --&gt; cmets 充当开始/结束标记, 定义一个包含内部标记的“虚拟元素”。昏死 理解这种虚拟元素语法并绑定,就好像你有一个真实的 容器元素。

    【讨论】:

    • 谢谢!不知道为什么会导致问题,但它确实解决了它:-)
    • @FakeRainBrigand - 答案已更新,并附有关于淘汰赛“无容器流语法”的注释。
    • 是的,&lt;!-- /ko --&gt; 似乎引起了问题,因为它找不到开始的评论标签。谢谢:-)
    猜你喜欢
    • 2013-07-18
    • 1970-01-01
    • 1970-01-01
    • 2014-01-10
    • 2015-12-27
    • 1970-01-01
    • 1970-01-01
    • 2012-11-08
    • 1970-01-01
    相关资源
    最近更新 更多