ajaxを使用して、一部のHTMLドキュメントを取得してKnockoutテンプレートとして使用します。Knockoutjsテンプレートを動的に更新するときにie8が発生する
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
GetContent()
AJAX呼び出しがコールバック関数が観測可能ContentHTML
が観測可能TemplateID
が<div>
が生成されたID- に設定されているHTML
- で更新され
- と呼ばれる終了すると、コンテンツ
- を取得するために、AJAX呼び出しを行い、 Firefoxでは
id
属性がに設定されている
KOによって更新これは魔法のように動作しますが、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ネイティブテンプレートを使用することを好みます)。