KO 外部テンプレート エンジンを使用して単一ページの Web アプリケーションを複数のファイルに分割していますが、読み込んでいるテンプレートには KO マークアップしか含まれていません。
このトピックを広範囲に調査したにもかかわらず、読み込まれているテンプレートに KO バインディングを確実に適用する方法がわかりません。
重要なポイントは次のとおりです。
- テンプレートによって定義された DOM 要素は最初は存在しません
- 私のテンプレート バインディングは動的なので、ドキュメント全体にバインディングを適用するときに KO がテンプレートを要求することはありません。
- テンプレートの読み込みを同期させたくない
- pb は、infuser が、バインディングを 2 回適用していると KO が不平を言う原因となっているテンプレートのキャッシュが発生している可能性があるという事実によって、さらにトリッキーになります。
これは私が持っているコードで、少なくとも 2 つの問題があります。
- applyBindings を呼び出しているため、テンプレートの読み込みが完了したという保証はありません。
- KO は、前後に移動するときにバインドを再適用しようとしていると不平を言います
外部テンプレート ノードが DOM に追加されるときにバインディングを 1 回だけ適用するクリーンで信頼性の高い方法についての提案はありますか?
index.htmlで:
<div id="templateDiv" data-bind="template: { name: currentView() }"></div>
main.jsで:
function AdminViewModel() { var self = this; self.currentView = ko.observable('adminHome'); } var viewModel = new AdminViewModel(); var SammyApp = $.sammy('#admin_content', function() { //... this.get('#/editMembers', function(context) { viewModel.currentView('editMembers'); ko.applyBindings(viewModel, $('.ko-template').get(0)); }); }; ko.applyBindings(viewModel);