jsviews/jsrender 转换器无法处理 {{:...}} 标签
jsviews/jsrender Converter not working on {{:...}} tag
我正在尝试使用转换器修改 jsrender 模板中的字符串,但我似乎无法让转换器在标签上工作。
例如,使用 JsRender API documentation Using converters 上的示例,我有:
<script>
$.views.converters("upper", function(val) {
return val.toUpperCase();
});
</script>
然后在我的 HTML 中我有 {{upper:Name}}
在控制台中抛出错误:TypeError: val is undefined,并且模板不呈现完全没有。
但是,如果我将转换器直接应用于 {{upper:"This should be uppercase"}}
这样的字符串,它会按预期输出大写字符串。
{{:Name}}
标签本身工作正常,那么为什么转换器不能使用它呢?
如果相关,这是一个 ASP.NET-MVC 项目,模板呈现的 JSON 数据来自 $.post('@Url.Action(..,..)')...
响应。在我尝试将转换器应用于标签之前,它一直运行良好。转换器在这种情况下不可用吗?
您的 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
发生的地方。
我正在尝试使用转换器修改 jsrender 模板中的字符串,但我似乎无法让转换器在标签上工作。 例如,使用 JsRender API documentation Using converters 上的示例,我有:
<script>
$.views.converters("upper", function(val) {
return val.toUpperCase();
});
</script>
然后在我的 HTML 中我有 {{upper:Name}}
在控制台中抛出错误:TypeError: val is undefined,并且模板不呈现完全没有。
但是,如果我将转换器直接应用于 {{upper:"This should be uppercase"}}
这样的字符串,它会按预期输出大写字符串。
{{:Name}}
标签本身工作正常,那么为什么转换器不能使用它呢?
如果相关,这是一个 ASP.NET-MVC 项目,模板呈现的 JSON 数据来自 $.post('@Url.Action(..,..)')...
响应。在我尝试将转换器应用于标签之前,它一直运行良好。转换器在这种情况下不可用吗?
您的 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
发生的地方。