1

なぜこれが機能しないのか理解できませんか? ...

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

上記のコードは、「一致する終了コメント タグが見つかりません: ko if: $root.List().length > 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 -->

これは動作します....

この問題について簡単な知識を持っている人はいますか?

4

1 に答える 1

4

コードの最初のブロックが機能しないことについて私が思いつくことができる唯一の有効な説明は、コードブロックが<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>

pcant には level 要素が含まれているためblock、ブラウザーは. このブラウザは、次のように処理します。pdiv

<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をインライン要素に置き換えたため、2番目のコードは機能しますspan

から取られたいくつかのコードとパラhttps://github.com/knockout/knockout/issues/346

于 2013-09-18T10:33:47.707 に答える