3
私はこのように私のページを取り込む "動的" 午前:Knockoutjs:動的なコンテンツとapplyBindings
<script type="text/html" id="ContainerTemplate">
<span data-bind="template: {
name: contentTemplate,
data: contentData }"></span>
</script>
<script type="text/html" id="fooTemplate">
<span data-bind="text: barAttribute"></span>
</script>
<button data-bind="click: complete">complete</button>
Hello
<span data-bind="template: { name: 'ContainerTemplate', foreach: myContents }"></span>
!
のViewModel:
var viewModel = {
myContents: ko.observableArray([]),
complete: function() {
viewModel.myContents.push({
contentTemplate:'fooTemplate',
contentData:{barAttribute:'world'}});
}
};
ko.applyBindings(viewModel);
特殊性は、テンプレート名が動的であるということです。それは(あなたはhttp://jsfiddle.net/hPQNx/でそれを試すことができます)のように動作するようですが、私は正しくやっているのだろうかと思う。ルートや親などの一部のテンプレート機能は動作していないようです。
applyBindingsを手動で再呼び出しする必要がありますか?これは関連するDOMノードで行う必要がありますが、セットアップでこれらのノードにアクセスするにはどうしたらよいですか?
。私はフィドルの中でそれをテストしなかったのは残念だ。私の前提は、ダイナミックテンプレートのためだと思いましたが、古いバージョンのKnockoutjs(1.2.1)があるのでこれが可能でしょうか?バージョン管理されたドキュメント、またはそれを確認できる機能的な変更ログはありますか? – Gnurfos
1.2.1は、$ root、$ parent、$ parents(またはjQueryテンプレート外の$ data)をサポートしていません。これらのコンテキスト変数は2.0で追加されました。 –
@Gnurfos - それは正しいです。これらの機能はKO 2.0.0まで追加されませんでした。 KO 2にはいくつかの大きな変更点がありました。私には全く違うのは、以前のバージョンではイベントハンドラが最初のパラメータとしてDOMイベントオブジェクトを受け取ったということだけでした。 KO v2では、イベントハンドラは最初のパラメータとしてモデルを受け取り、2番目のパラメータとしてDOMイベントオブジェクトを受け取ります。 DOMイベントオブジェクトを使用するKOコードを変更して、2番目のパラメータとして考慮する必要があります。 // KO 1.2以降 myViewModel.myEventHandler =機能(EVT) // KO v2の myViewModel.myEventHandler =機能(データ、EVT) –