アプリケーションの状態が変化したときに、実行時にテンプレートを動的に変更したいビューモデルがあります。解決策を考え出す際に、このリンクを参照 しました。
私のhtmlページには、ビューモデルのリストにバインドされたdivがあります:
<div class="app"
data-bind="template: {name: templateSelector, foreach: viewModelBackStack}">
</div>
そして、私の templateSelector メソッドは次のようになります。
this.templateSelector = function(viewModel)
{
if (!_itemTemplate)
{
_itemTemplate = ko.computed(function() {return this.template();}, viewModel);
}
return _itemTemplate();
}
var _itemTemplate;
ご覧のとおり、viewModel のテンプレートを返す計算されたオブザーバブルを構築しています。
私のビューモデルは次のようになります。
function MyViewModel
{
this.template = ko.observable("MyTemplate");
}
ajax呼び出しが完了した結果としてテンプレートの値を変更していますが、計算されたオブザーバブルも正しく呼び出されていることがわかります(確認するためにそこにアラートを配置しました)が、htmlのバインディングはテンプレートを更新しません私のビューモデル。どんな助けでも大歓迎です。
更新: 動作しない原因となっているバグを見つけました。基本的に、knockout.js を含める前に jquery.tmpl プラグインを含めていました。jquery.tmpl を削除するとうまくいきました。