Я использую ajax для получения частичного документа HTML для использования в качестве шаблона нокаута.Исключение происходит в ie8 при динамическом обновлении шаблона Knockoutjs
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>
Script (частичное):
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>
является актуализация К.О.
В Firefox это работает как шарм, но IE8 выбрасывает исключение: Error: Unexpected call to method or property access.
при обновлении фиктивного <script>
тег с загруженным шаблоном.
Ошибка: jQuery.html()
. Сначала elem.innerHTML = value;
сбой, который улавливается, тогда this.empty().append(value)
терпит неудачу, что дает исключение.
Partial 'трассировки стека':
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
Что может быть проблема? Есть ли там (известная) проблема IE8 с обновлением тегов <script>
?
Есть ли другой способ «хранить» шаблоны внутри html-страницы для использования ko (я предпочитаю использовать традиционный шаблон для ko!)?