我有一个通过require.js运行的主干/下划线应用程序
我刚刚对我的应用程序进行了一些跨浏览器检查,并意识到我的applcation在ie8中的模板中加载时出现问题。
在我的应用程序内和运行渲染函数的视图部分中,我加载并调用正确的模板
然后我使用_.template来转换代码。
所以在渲染中我称之为
$t.$el.append($t.renderTemplate(data, templateVars));
数据是<%=%>中的html format和templateVars是返回数据的对象列表(通常是json结果)
renderTemplate函数看起来像
renderTemplate: function(html, vars) {
var compiled = _.template(html);
console.log(compiled, "compiled");
return compiled(vars);
},
问题是在ie8中我得到一个错误
Object不支持此属性或方法
这是
错误的一行return render.call(this, data, _);
来自此代码
_.template = function(text, data, settings) {
settings = _.extend(_.templateSettings, settings);
// Compile the template source, taking care to escape characters that
// cannot be included in a string literal and then unescape them in code
// blocks.
var source = "__p+='" + text
.replace(escaper, function(match) {
return '\\' + escapes[match];
})
.replace(settings.escape || noMatch, function(match, code) {
return "'+\n_.escape(" + unescape(code) + ")+\n'";
})
.replace(settings.interpolate || noMatch, function(match, code) {
return "'+\n(" + unescape(code) + ")+\n'";
})
.replace(settings.evaluate || noMatch, function(match, code) {
return "';\n" + unescape(code) + "\n;__p+='";
}) + "';\n";
// If a variable is not specified, place data values in local scope.
if (!settings.variable) source = 'with(obj||{}){\n' + source + '}\n';
source = "var __p='';" +
"var print=function(){__p+=Array.prototype.join.call(arguments, '')};\n" +
source + "return __p;\n";
var render = new Function(settings.variable || 'obj', '_', source);
if (data) return render(data, _);
var template = function(data) {
return render.call(this, data, _);
};
// Provide the compiled function source as a convenience for build time
// precompilation.
template.source = 'function(' + (settings.variable || 'obj') + '){\n' +
source + '}';
return template;
};
// Add a "chain" function, which will delegate to the wrapper.
_.chain = function(obj) {
return _(obj).chain();
};
这是代码ff / chrome用于转换传回模板
// Add a "chain" function, which will delegate to the wrapper.
_.chain = function(obj) {
return _(obj).chain();
};
Underscore.js 1.3.2
这在ie9,FF和chrome
中工作正常任何人都可以帮忙吗?
答案 0 :(得分:3)
最有可能的原因是,除非您打开开发工具,否则IE8中不支持console.log()
。
您是否检查过注释掉的console.log()
行,或者Dev Tools是否已打开?检查Dev Tools打开的优点是,您将能够看到错误发生在哪一行(如果它完全失败,因为console.log()
将可用)。