javascript - Knockout js 嵌套控制流绑定(bind)不起作用

标签 javascript knockout.js

我刚刚开始使用 Knockout,我不确定我是否发现了该库的错误,或者我是否只是在闲逛。

我有一个数组,为了显示目的,我想将其拆分为三个列表,但它显示开始和结束 ul标签把我的事情弄乱了。

这是我想要做的事情的一个jsfiddle,看起来只有第一个列表项正在为每个列表呈现,而其他列表项则被跳过。 http://jsfiddle.net/bn44e/2/

这是一个几乎相同的 jsfiddle,我在其中替换了 <ul></ul>标签为 <p>start</p><p>stop</p>并且所有列表项都正在呈现。 http://jsfiddle.net/Ue4C3/

最佳答案

这不是一个bug,ko虚拟元素绑定(bind)的打开和关闭必须在DOM的同一级别

因为ko管理的是DOM,所以它需要动态创建/删除虚拟元素内的所有DOM(不是字符串)内容。 ko没有办法管理单个<ul> (或 </ul> )字符串。

所以在第一个 jsfiddle 中,ko 像这样对待你的绑定(bind):

<!-- ko foreach: items -->

  <!-- ko if: $index() === 0 || $index() === 10 || $index() === 20 -->
    <ul>

    <!-- ignored because there is no matching opening -->
    <!-- /ko --> 

    <li>Index <span data-bind="text: $index()" style="color:blue;"></span></li>

    <!-- ignored because there is no matching closing -->
    <!-- ko if: $index() === 9 || $index() === 19 || $index() === 29 -->

    </ul>
  <!-- /ko --> <!-- this closing actually matches the first opening ko -->

<!-- /ko -->

更新

看起来被忽略的虚拟绑定(bind)搞乱了内部<span data-bind="text: $index()"></span>的绑定(bind)上下文。 ,必须删除不匹配的虚拟绑定(bind)才能使内部$index在职的。 http://jsfiddle.net/bn44e/1/

我不知道上下文问题背后的原因,猜测需要深入挖掘源代码以找出不匹配的虚拟绑定(bind)的影响。

但无论如何,不​​匹配的虚拟绑定(bind)不应保留在生产代码中。

关于javascript - Knockout js 嵌套控制流绑定(bind)不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24857019/

相关文章:

javascript - 将嵌套对象中的值与相应的 knockout 绑定(bind)相匹配?

javascript - 禁用上下文菜单和右键单击菜单

javascript - id 和 class 对象的长度之间的差异

javascript - 计算字符串中整数的数量

javascript - 如何使用 KnockoutJS、SammyJS 和 pagerJS 组织 SPA

javascript - knockoutjs 中的选项、optionsText 和 optionsValue

javascript - 使用 jquery 将数据发送到 MVC Controller

javascript - 如何显示数组中的随机项目?

javascript - 为什么在上游有事件时有一个 'event'变量可用但没有定义?

knockout.js - 在 Knockout 中使用访问父 View 模型中函数的计算值