注释的foreach绑定与knockoutjs中的foreach绑定

54

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

<!-- ko foreach: customer -->
   <div data-bind="text: id" />
<!-- /ko -->

对抗

<div data-bind="foreach: customer">
    <div data-bind="text: id" />
</div>

这两种方法之间有什么差异?


2
你确定要使用“更好”的词吗?这会让这个问题更加主观。 - JDB
阅读注释4 - Sergey Berezovskiy
2
谢谢,现在我因为提问而加速了2000多分 :P - Elisabeth
2个回答

66

当绑定部分存在父子关系时,如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 -->

然而,如果你有一个有序列表,你应该使用本地绑定,因为它是最合理的。

本地

<ol data-bind="foreach: customer">
   <li data-bind="text: customer.name"></li>
</ol>

无容器

<ol> 
   <!-- ko foreach: customer -->
       <li data-bind="text: customer.name"></li>
   <!-- /ko -->
</ol>
第二个例子看起来很傻,你正在为本应不复杂的事情增加更多复杂性。

6
我认为,容器无绑定是处理某些情况下的最佳解决方案,因为根据HTML规范,您受到了可以添加到给定容器中的元素数量的限制。例如,您有一个包含静态行和表示动态行的可观察数组的tbody,但tbody的唯一有效子元素是tr元素。 - kmkemp

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接