我正在尝试使用转换器修改jsrender模板中的字符串,但我似乎无法让转换器处理标记。 例如,使用JsRender API documentation Using converters上的示例,我有:
<script>
$.views.converters("upper", function(val) {
return val.toUpperCase();
});
</script>
然后在我的HTML中我有{{upper:Name}}
在控制台中抛出错误: TypeError:val未定义,模板根本不呈现。
但是,如果我将转换器直接应用于{{upper:"This should be uppercase"}}
这样的字符串,它会按预期输出大写字符串。
{{:Name}}
标记本身可以正常工作,那么为什么转换器不能使用它呢?
如果它是相关的,这是一个ASP.NET-MVC项目,模板呈现的JSON数据来自$.post('@Url.Action(..,..)')...
响应。它完全正常工作,直到我尝试将转换器应用于标签。转换器在这种情况下不可用吗?
答案 0 :(得分:0)
在某些情况下,您的Name
属性似乎未定义。
如果您的名称未定义,则{{:Name}}
将呈现为空字符串""
- 但{{upper:Name}}
将引发错误,因为undefined.toUpperCase()
将失败。
您可以通过打破抛出的错误(或在转换器中放置断点或debugger
语句)并查看未定义Name
的来源来进行调查。
您还可以通过以下任何技术防止错误被抛出 - 而是获取错误信息
{{upper:Name onerror=true}}
或{{upper:Name onerror='bad'}}
(请参阅https://www.jsviews.com/#onerror)写
$.views.converters("upper", function(val) {
return val === undefined ? 'undefined' : val.toUpperCase();
});
写$.views.settings.debugMode(true);
并查看您获得的输出,进一步调查您的未定义Name
的位置。