9
Knockout.jsで監視可能なバインディングをクリア/削除するにはどうすればよいですか?
ユーザーが複数回実行できるWebページに機能を構築しています。ユーザーのアクションを通じて、ko.applyBindings()を使用してオブジェクト/モデルが作成され、HTMLに適用されます。 データバインドされたHTMLは、jQueryテンプレートを介して作成されます。 ここまでは順調ですね。 2番目のオブジェクト/モデルを作成してこの手順を繰り返し、ko.applyBindings()を呼び出すと、2つの問題が発生します。 マークアップには、以前のオブジェクト/モデルと新しいオブジェクト/モデルが表示されます。 オブジェクト/モデルのプロパティの1つに関連するjavascriptエラーが発生しますが、マークアップではレンダリングされます。 この問題を回避するには、最初のパスの後でjQueryの.empty()を呼び出して、すべてのデータバインド属性を含むテンプレート化されたHTMLを削除し、DOMに存在しないようにします。ユーザーが2番目のパスのプロセスを開始すると、データにバインドされたHTMLがDOMに再度追加されます。 しかし、私が言ったように、HTMLがDOMに再度追加され、新しいオブジェクト/モデルに再バインドされると、最初のオブジェクト/モデルからのデータがまだ含まれ、まだ発生しないJSエラーが発生します最初のパスの間。 結論は、マークアップがDOMから削除されていても、Knockoutがこれらのバインドされたプロパティを保持していることです。 したがって、私が探しているのは、これらのバインドされたプロパティをKnockoutから削除する方法です。観測可能なモデルがなくなったことをノックアウトに伝えます。これを行う方法はありますか? 編集 基本的なプロセスは、ユーザーがファイルをアップロードすることです。次にサーバーはJSONオブジェクトで応答し、データにバインドされたHTMLがDOMに追加されます。次に、JSONオブジェクトモデルがこのHTMLにバインドされます。 mn.AccountCreationModel = new AccountViewModel(jsonData.Account); ko.applyBindings(mn.AccountCreationModel); ユーザーがモデルでいくつかの選択を行うと、同じオブジェクトがサーバーにポストバックされ、データバインドされたHTMLがDOMから削除され、次のJSを取得します mn.AccountCreationModel = null; ユーザーがもう一度これを実行する場合は、これらのすべてのステップが繰り返されます。 私はコードがjsFiddleデモを行うにはあまりにも「関与」していると思います。