【问题标题】:jsviews/jsrender Converter not working on {{:...}} tagjsviews/jsrender 转换器不适用于 {{:...}} 标签
【发布时间】:2016-04-14 00:37:10
【问题描述】:

我正在尝试使用转换器来修改 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(..,..)')... 响应。在我尝试将转换器应用于标签之前,它运行良好。转换器在这种情况下不可用吗?

【问题讨论】:

    标签: asp.net-mvc jsrender jsviews


    【解决方案1】:

    在某些情况下,您的 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发生在哪里。

    【讨论】:

    • 谢谢@BorisMoore 我不确定出了什么问题,因为我今天启动了这个项目并尝试了 {{upper:Name onerror=true}} 然后一切都开始工作了,即使删除了 onerror=true .但我确信下次遇到问题时调试信息会有所帮助:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-15
    • 1970-01-01
    • 2020-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-07
    相关资源
    最近更新 更多