javascript - Knockoutjs 在尝试创建一系列无序列表时抛出异常

标签 javascript html css knockout.js

我正在尝试创建一系列 <ul>使用 foreach: 的标签语境。目标是迭代列表,并启动一个新的 <ul>每第 4 项。到目前为止我的代码是:

<ul data-bind="foreach: Areas">
   <li><span>
      <input type="checkbox" data-bind="value: AreaId, checked: $root.AreasImpacted" />
      <label><span data-bind="text: Name"></span></label>
   </span></li>

   <!-- ko if: ($index() % 4 == 0) -->
   </ul><ul>
   <!-- /ko -->
</ul>

当我这样做时,我得到了异常:

Microsoft JScript runtime error: Cannot find closing comment tag to match: ko if: ($index() % 4 == 0)

似乎不喜欢</li><li> if内的内容注释 block ,可能是因为 DOM 解析器正在摸索如何实际解析这个。如果我将其更改为:

<!-- ko if: ($index() % 4 == 0) -->
<li>Fake!</li>
<!-- /ko -->

然后它就会完美地工作(也就是说,每第 4 个元素创建一个假 <li>

我也对实现这一目标的其他想法持开放态度。谢谢!

最佳答案

是的,初始 DOM(在 Knockout 激活之前)是非法的,Knockout 并不是通过将 HTML 粘贴到 DOM 中来工作的,它实际上将其复制到一个 javascript DOM 对象中,然后将其插入到 DOM 中。 </ul><ul>不是合法对象,因此 Knockout 无法将其转换为模板。即使可以,foreach装订原件<ul> ,不是由if启动的新的,因此添加元素的 Knockout 代码仍将在第一个列表上运行。

所以,总而言之,Knockout 的 foreachtemplate绑定(bind)不能通过像字符串一样构建 HTML 来工作。

您将需要一个更复杂的解决方案。

Something like this会起作用,但我不知道这是否仍然是您想要的:

<!-- ko foreach: { data: chunkedList, as: 'areas' } -->
<span>SPLIT!</span>
<ul data-bind="foreach: areas">
    <li><span data-bind="text: name"></span></li>
</ul>
<!-- /ko -->

var Viewmodel = function(data) {
    var self = this;
    self.items = ko.observableArray(data);
    self.chunkedList = ko.computed(function() {
        var result = [];
        var chunk = [];
        self.items().forEach(function(item, index) {
            if (index % 4 === 0) {
                chunk = [];
                result.push(chunk);
            };
            chunk.push(item);
        });
        return result;
    });
};

关于javascript - Knockoutjs 在尝试创建一系列无序列表时抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17891738/

相关文章:

javascript - 使用 FancyBox 3 获取图像高度

javascript - 加载时的 Django 微调器 (spin.js)

javascript - jquery平滑滚动问题

c# - 我是在正确地播种数据还是做错了什么?

html - css子菜单没有出现

javascript - 在悬停事件上隐藏 div

javascript - 分钟更新时需要javascript自动重新加载页面

javascript - 如何添加一个功能,以便按钮将使 div 消失/出现?

php - 防止流量绕过着陆页

html - CSS:在div的底部粘贴一个链接