如果foreach中的块未按预期呈现,则嵌套

时间:2014-10-06 20:06:34

标签: knockout.js

拥有以下模板,但它不会按预期呈现。有些淘汰出局的控制流程。 name 属性应该在 div 中呈现到两个 if 语句之间,但它不会。我错过了什么?

<!-- ko foreach: userAddresses -->
    <div data-bind="text: name"></div> // this prints correctly
    <!-- ko if: shouldStartNewRow($index) -->
    <div class="row">
    <!-- /ko -->
        <div class="col-xs-4 text-left"><div data-bind="text: name"></div></div> // nothing prints here
    <!-- ko if: shouldStartNewRow($index) -->
    </div>
    <!-- /ko -->
<!-- /ko -->

这会产生:

<div>Joe blow</div>
<div class="row">
    <div class="col-xs-4 text-left"><div> </div></div> // missing Joe blow here. it does produce a single space
</div>

更新
创建了fiddle来显示问题。似乎如果不能完全关闭条件块中的所有html,这会导致淘汰失败。

1 个答案:

答案 0 :(得分:0)

试试

<div data-bind="text: $data.name"></div>

我认为你不能在评论if-block

中包含未公开的元素

所以它应该看起来像:

<!-- ko foreach: userAddresses -->
    <div data-bind="text: name"></div> 
    <!-- ko if: shouldStartNewRow($index) -->
    <div class="row"> 
        <div class="col-xs-4 text-left"><div data-bind="text: name"></div></div> 
    </div>
    <!-- ko ifnot: shouldStartNewRow($index) -->
        <div class="col-xs-4 text-left"><div data-bind="text: name"></div></div> 
    <!-- /ko -->
<!-- /ko -->