在knockoutjs评论foreach绑定vs foreach绑定

Eli*_*eth 52 javascript templating knockout.js knockout-templating

在我的HTML中,我可以定义这些淘汰的foreach绑定:

<!-- ko foreach: customer -->
   <div data-bind="text: id" />
<!-- /ko -->
Run Code Online (Sandbox Code Playgroud)

VS

<div data-bind="foreach: customer">
    <div data-bind="text: id" />
</div>
Run Code Online (Sandbox Code Playgroud)

这两种方法之间的差异在哪里?

Dav*_*ast 65

当绑定部分中存在父子关系时,使用本机绑定,如ul和li.

当绑定部分没有父子关系时,请使用注释语法进行无容器绑定.

在您的示例中,您使用第一个代码块,因为您没有尝试绑定到父子结构.您要做的只是将客户数据绑定到div,您不必创建父div并foreach通过客户并在父div中添加另一个div.这比你想做的还要多.

很好地利用无容器装订

<!-- ko foreach: customer -->
<section>
   <p data-bind="text: customer.name"></p>
   <p data-bind="text: customer.orderDate"></p>
</section>
<!-- /ko -->
Run Code Online (Sandbox Code Playgroud)

但是,如果您有一个有序列表,则应使用本机绑定,因为它才有意义.

本地人

<ol data-bind="foreach: customer">
   <li data-bind="text: customer.name"></li>
</ol>
Run Code Online (Sandbox Code Playgroud)

无容器

<ol> 
   <!-- ko foreach: customer -->
       <li data-bind="text: customer.name"></li>
   <!-- /ko -->
</ol>
Run Code Online (Sandbox Code Playgroud)

第二个例子看起来很傻.你为不应该复杂的东西增加了更多的复杂性.

  • 我想补充一点,无容器绑定是最好的解决方案,在这种情况下,您可以根据HTML规范实际添加到给定容器中的元素.例如,你有一个带有静态行的tbody,然后是一个代表动态行的可观察数组,但是tbody的唯一有效子元素是tr元素. (5认同)