【问题标题】:nested if blocks within foreach not rendering as expected如果 foreach 中的块未按预期呈现,则嵌套
【发布时间】:2014-10-07 05:14:03
【问题描述】:

具有以下模板,但未按预期呈现。淘汰赛的控制流程出了点问题。 name 属性应该在两个 if 语句之间的 div 中呈现,但事实并非如此。我错过了什么?

<!-- 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,则会导致淘汰赛失控。

【问题讨论】:

标签: knockout.js


【解决方案1】:

试试吧

<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 -->

【讨论】:

  • 也试过了,还是不打印。
  • 设置小提琴会很有帮助
  • 如果我将所有代码移动到 ififnot 块中,那么它会正确呈现,但是这样做我会重复我的模板两次,呃。当然,这是一个非常淡化的版本。 Sanderson 是否在文档中定义了有关此行为的规则?好像没找到。
猜你喜欢
  • 2019-05-28
  • 1970-01-01
  • 1970-01-01
  • 2017-02-23
  • 2018-10-01
  • 2014-09-29
  • 2017-01-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多