淘汰错误?,无法匹配评论结束

Knockout bug?, cannot match comment end

本文关键字:评论 结束 错误 淘汰      更新时间:2023-09-26

不知道为什么这不起作用?....

<!-- ko if: $root.List().length > 1 || $root.AnyNotEqualToSelectedLanguage() -->
    <div>
         <select data-bind="options: $root.List, optionsText: 'displayText', value: selectedValue, optionsCaption: 'Choose...'"></select>
    </div>
<!-- /ko -->

上面的代码生成一个"找不到要匹配的结束注释标签:koif:$root。列表().长度> 1 ||$root。AnyNotEqualToSelectedLanguage() "

而。。。。。。。

<!-- ko if: $root.List().length > 1 || $root.AnyNotEqualToSelectedLanguage() -->
    <span>
         <select data-bind="options: $root.List, optionsText: 'displayText', value: selectedValue, optionsCaption: 'Choose...'"></select>
    </span>
<!-- /ko -->

这行得通....

有人对这个问题有快速的了解吗?

对于第一个代码块不起作用,我能想到的唯一有效解释是因为您的代码块可能在 <p></p> 标记内

例如

<p>
<!-- ko if: $root.List().length > 1 || $root.AnyNotEqualToSelectedLanguage() -->
    <div>
         <select data-bind="options: $root.List, optionsText: 'displayText', value: selectedValue, optionsCaption: 'Choose...'"></select>
    </div>
<!-- /ko -->
</p>

由于p不能包含block级元素,因此浏览器在看到您的div时将关闭p标记。这个浏览器最终会像这样处理它:

<p>
    <!-- ko if: $root.List().length > 1 || $root.AnyNotEqualToSelectedLanguage() -->
</p>
        <div>
             <select data-bind="options: $root.List, optionsText: 'displayText', value: selectedValue, optionsCaption: 'Choose...'"></select>
        </div>
    <!-- /ko -->
<p></p>

在这一点上,敲除很难解析它。

您可以检查为小提琴生成的源:http://jsfiddle.net/jcHzK/1/

它与@Artem创建的相同小提琴不起作用,因为代码现在位于p标签内。

您的第二个代码有效,因为您已将块元素div替换为内联元素span

一些代码和段落取自: https://github.com/knockout/knockout/issues/346