7

Knockout および Knockout-sortable プラグインで作成した To-do のようなソート可能なリストで別の問題が発生しました。

現在の時間に配置された要素の下に赤い区切り記号を配置し、その区切り記号の前に要素がドロップされた場合は並べ替えをキャンセルする必要があります。

「目に見える」バインディングを試してみましたが、何らかの方法で機能しますが、目に見えるバインディングはDOM要素を非表示にするだけで、ソート可能なarrayIndexを台無しにして、不要な要素を追加します。

<div class="delimiter" data-bind="visible: time() == $root.limit()"></div>

「if」バインディングは、必要な場合にのみDOM要素を挿入するため、より優れていますが、visibleで使用した式は常にtrueと評価され、理由がわかりません...

<div class="delimiter" data-bind="if: time() == $root.limit()"></div>

これがフィドルです:http://jsfiddle.net/ingro/VaqqF/

どんな助けでも大歓迎です、ありがとう!

4

1 に答える 1

18

if-bindingを誤解しているだけです。ノード自体ではなく、適用されているノードのコンテンツが削除されます。ラッパーを作成せずにノードを削除する場合(バインディングを追加するために使用できます)、コンテナーレス制御フロー構文と呼ばれるifバインディングのコメントバージョンもあります。

<!-- ko if: time() == $root.limit() -->
  <div class="delimiter"></div>
<!-- /ko -->

http://jsfiddle.net/VaqqF/11/

参照: http: //knockoutjs.com/documentation/if-binding.html

于 2012-06-14T10:32:29.767 に答える