私は奇妙なことに出くわしました。(少なくとも私には)そして、この場合はウィジェットを利用したいので、これを修正するための最良のルートが何であるかわからず、データがないときにマークアップを実際にレンダリングさせません
<div data-bind="visible: menuItems().length > 0">
greater
</div>
<div data-bind="visible: menuItems().length == 0">
equal
</div>
<!-- ko if: menuItems().length == 0 -->
<form role="form">
<fieldset>
<legend>Members</legend>
//teh form markup
</fieldset>
</form>
<!-- /ko -->
<!-- ko if: menuItems().length > 0 -->
<h2 data-bind="text: settings.header"></h2>
<ul data-bind="foreach: menuItems()">
<li>
<a href='#' data-bind='click: $data.itemClick, text: $data.name'></a>
</li>
</ul>
<!-- /ko -->
図A
この場合、メニュー項目の数は 0 でした。しかし、コード部分を含む if ステートメントは両方ともレンダリングされます。EG ヘッダーと ul (図 A)
クロム経由でコードを検査すると。" " が欠落していることがわかり<!-- ko if: menuItems().length == 0 -->
ます.... (図 B) これは、含まれているコンテンツがまだそこにある理由を説明しています... 私の仮定は、" <!-- you get the idea -->
" が何らかの形で除外されることです。
これは、マークアップのレンダリング方法などと関係があるのでしょうか?
ウィジェットのバインディング/DOM 作成プロセス中にコメント化されたコード セクションが除外されますか? したがって、ヘッダーと ul がレンダリングされます (コレクションは空であり、空の ul に相当します)...この場合、どちらも存在しないはずです...
図B
メニュー項目を> 3に設定すると、唯一の違いは、「より大きな」という単語が表示され、メニュー項目があり...それでもフォームがあることです
:/
理解していない