ユーザーが複数回実行できる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デモを行うにはあまりにも「関与」していると思います。
init
適用するデータを渡す関数を公開しないのはなぜですか?