バインドしている場合、ノックアウト js に問題があります。エラーなしでバインディングのサブ プロパティを参照できるため、バインディングをかなり自由に使用します。
問題の 1 つの原因は、if バインディングによって追加される DOM 要素にイベント ハンドラーなどを登録することです。基本的に、if バインディングによって追加された要素が DOM に追加されたときに、コールバックを取得する必要があります。livequery jquery プラグインを使用してみましたが、要素が 2 回追加されているようです。これを示すために、いくつかのサンプルコードを思いつきました。
ノックアウトのドキュメントには、次のように明確に記載されています。
「ただし、if バインディングは、DOM に含まれるマークアップを物理的に追加または削除し、式が true の場合にのみバインディングを子孫に適用します。」
http://knockoutjs.com/documentation/if-binding.html
ただし、次のコードでは、インライン スクリプトのアラートが実行されます。
JS:
var vm = {
val: ko.observable(false),
someText: ko.observable("some text"),
};
ko.applyBindings(vm, document.getElementById("d1")
HTML:
<div id="d1" data-bind="if: val">
<span data-bind="text: someText"></span>
<script>alert("here")</script>
</div>