我有一些渲染完全正常的Underscore.js模板,除了该模板内部调用的函数未定义。例如:
<span class='<% checkClass(oldValue, newValue) %>'>
函数本身在模板外部完全正常工作,并按预期返回类名。 Underscore模板是否具有我们的范围?
UPD:这是如何定义和调用模板的:
function checkClass() {... return 'Something' ...}
pData = [Object]; //Just for reference
var rowsTpl = _.template("<span class='<% checkClass(oldValue, newValue) %>'>");
_.each(pData, function (vals, name) {
prOutput = rowsTpl(vals);
$(this.elem).html(prOutput);
});
答案 0 :(得分:1)
只是想通了(我认为)正确的方法。就我而言,我必须将自己的对象传递给模板,包括所需的函数或数据:
var rowsTpl = _.template("<span class='<% func.checkClass(val.oldValue, val.newValue) %>'>");
请注意,我正在从 func 对象访问 checkClass 函数,从访问 oldValue 和 newValue val 对象。这是宣言:
_.each(pData, function (vals, name) {
outPut += rowsTpl({
name: name,
val: vals,
func: {
checkClass: checkClass,
anyOtherThing: thing
}
});
});