ajaxを使用して、ノックアウトテンプレートとして使用する部分的なHTMLドキュメントを取得します。
HTML:
<script type="text/html" id="LoadingTemplate">Loading...</script>
<script type="text/html" data-bind="attr: {'id': DynamicTemplateID}, html: ContentHTML></script>
<div class="main-page" data-bind="template: TemplateID"></div>
スクリプト(部分的):
self.TemplateID = ko.observable("LoadingTemplate");
self.DynamicTemplateID = ko.observable(GenerateUUID());
self.ContentHTML = ko.observable();
ko.computed(function () {
var url = self.ContentURL();
self.GetContent(url, function (html) {
self.ContentHTML(html);
self.TemplateID(self.DynamicTemplateID());
});
});
- 最初に
<div>
表示されます:'読み込み中' - 動的テンプレートの
id
属性は、生成されたIDに設定されます GetContent()
ajax呼び出しを実行してコンテンツを取得します- ajax呼び出しが終了すると、コールバック関数が呼び出されます
- オブザーバブル
ContentHTML
はhtmlで更新されます - オブザーバブル
TemplateID
は生成されたIDに設定されます - は
<div>
koによって更新されます
Firefoxでは、これは魅力のように機能しますが、IE8は例外をスローします。ロードされたテンプレートでダミータグError: Unexpected call to method or property access.
を更新している間です。<script>
エラーはによってスローされjQuery.html()
ます。最初elem.innerHTML = value;
に失敗し、それがキャッチされてからthis.empty().append( value )
失敗し、例外が発生します。
部分的な「スタックトレース」:
this.appendChild( elem ); => callback function in jquery.append (v1.7.2 line 5847)
jquery.domManip
jquery.append
jquery.html
ko.utils.setHtml
ko.bindingHandlers.html.update
ko.applyBindingsToNodeInternal
ko.dependentObservable.evaluateImmediate
何が問題なのですか?<script>
タグの更新に関する(既知の)IE8の問題はありますか?
koが使用するためにhtmlページ内にテンプレートを「保存」する別の方法はありますか(私はkoネイティブテンプレートを使用することを好みます!)?