:
ko.applyBindings(viewModelA, document.getElementById("newElement"));
この関連の質問を参照してくださいまあまあ、あなたはこれについて間違った方向に行っているようです。あなたのビューはあなたのビューモデルによって駆動されるべきです。したがって、ノックアウトバインディングを適用する必要があるDOM要素を直接追加するべきではありません。
代わりに、ビューの変更を反映するようにビューモデルを更新する必要があります。変更すると、新しい要素が表示されます。
たとえば、$('body').append('<a href="#" data-bind="click: something">Click me!</a>');
の場合、ボタンを表示するときにDOM要素を追加するのではなく、ビューモデルを使用してボタンの表示を制御します。
だからあなたのビューモデルは
var viewModel = { clickMeAvailable: ko.observable(false) }
が含まれており、あなたのHTMLは、あなたはその後、ちょうどviewModel.clickMeAvailable(true)
<a href="#" data-bind="click: something, visible: clickMeAvailable">Click me!</a>
私をクリックするボタンが利用可能なアプリケーションの状態の変更をあるよう
が含まれています。
ノックアウトの大きな部分は、ビジネスロジックとプレゼンテーションを分離することです。だから私をクリックして私がボタンを含むことを気にしないコードを私をクリックしてください。私がクリックすると、更新はviewModel.clickMeAvailable
になります。
たとえば、フォームを有効に入力したときに利用できる保存ボタンがあります。観察可能なビューモデルformValid
への保存ボタンの可視性を結びつけます。
しかし、フォームを有効にした後に変更することにした場合、保存する前に合意しなければならない合意が表示されます。フォームのロジックは変更されません。フォームが有効な場合はまだformValid
に設定されています。 formValid
が変更されたときに起こることを変更するだけです。
lassombraがこの回答のコメントに指摘しているように、直接的なDOM操作が最善のアプローチである場合があります。たとえば、必要に応じてビューの一部だけを水和したい複雑な動的ページです。しかし、あなたはこれを行うことによってノックアウトが提供する懸念の分離のいくつかをあきらめています。このトレードオフを検討している場合は注意してください。
何をしているのかを示すコードを投稿できますか? –
よく、例えば次のようなものです:$( 'body')。append( 'Click me!'); –
私はそれが役に立つ答えを提供するのに十分なコンテキストであるかどうかはわかりません。私はあなたが何をしようとしているのか理解していますが、コードを完全に理解している(なぜ、新しいDOM要素を注入するのか)、これを処理する最善の方法で答えるのは難しいです。現在のソリューションを見て、誰かが新しい要素を注入する必要がない方法を指摘したり、やりたいことを回避する方法があるかもしれません。 –