ユーザーが複数回実行できる機能を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デモを実行できないのではないかと思います。