我只在IE中收到上述错误。 抛出错误的行显然是
element.setAttribute('data-view', viewId);
在viewEngine.js
中createView: function(viewId) {
var that = this;
var requirePath = this.convertViewIdToRequirePath(viewId);
var existing = this.tryGetViewFromCache(requirePath);
if (existing) {
return system.defer(function(dfd) {
dfd.resolve(existing.cloneNode(true));
}).promise();
}
return system.defer(function(dfd) {
system.acquire(requirePath).then(function(markup) {
var element = that.processMarkup(markup);
element.setAttribute('data-view', viewId);
that.putViewInCache(requirePath, element);
dfd.resolve(element.cloneNode(true));
}).fail(function(err) {
that.createFallbackView(viewId, requirePath, err).then(function(element) {
element.setAttribute('data-view', viewId);
that.cache[requirePath] = element;
dfd.resolve(element.cloneNode(true));
});
});
}).promise();
},
编辑: 我将其缩小到生命周期中activate()和binding()之间发生的错误。不过,不确定这是否有任何帮助。
edit2:经过进一步调查,我发现processMarkup(标记)没有像它应该的那样返回一个HtmlDivElement,而且通常对所有其他模块都有...
答案 0 :(得分:1)
看起来IE8的setAttribute方法存在问题。
要解决,请尝试以下方法:
将此作为您的doctype
<!DOCTYPE html>
然后把它放在文件的头部
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
答案 1 :(得分:-1)
我发现了错误,它不是任何JavaScript代码的一部分。 如果提供的html标记具有语法正确的HTML标记,则Durandals viewEngine.js中的$ .parseHTML()函数仅返回一个对象。我忘了在视图的最后关闭一个div,这就是问题所在。