【问题标题】:Migrating jsrender to jsviews {{else}}-issue将 jsrender 迁移到 jsviews {{else}}-issue
【发布时间】:2017-11-02 00:05:37
【问题描述】:

jsrender / jsviews 的问题。 我已经建立了一个巨大的页面,它成功地利用了 jsrender v.0.9.83。

但是,现在当我尝试合并 jsviews v.0.9.89(并且还尝试使用 jsrender v.0.9.89)时,我遇到了最奇怪的错误。

{{else}} 块似乎会导致错误。

这是 if else 块的示例:

{{if device_comment}}
    {{:device_comment}}
{{else}}
    {{:device_name}}
{{/if}}

这在以前的版本中运行良好,没有问题。

但是现在 jsviews 报告渲染错误:

JsViews Error: Syntax error
Compiled template code:

// jsvTmpl
var v,t=j._tag,c=j._cnvt,ret=""

+"\n<tr data-id=\"";
try{
ret+=((v=data.id)!=null?v:"");
}catch(e){ret+=j._err(e,view,undefined);}ret=ret
+"\">\n <td><input type=\"checkbox\" class=\"sel\"/></td>\n <td>";
try{
ret+=((v=data.id)!=null?v:"");
}catch(e){ret+=j._err(e,view,undefined);}ret=ret

+"<br/>(";
try{
ret+=((v=data.id)!=null?v:"");
}catch(e){ret+=j._err(e,view,undefined);}ret=ret
+")</td>\n  <td>\n      ";
try{
ret+=t("if",view,this,[
{view:view,tmpl:1,
    params:{args:['device_comment']},
    args:[data.device_comment],
    props:{}},;
}catch(e){ret+=j._err(e,view,undefined);}ret=ret
{view:view,tmpl:2,
    params:{args:[]},
    args:[],
    props:{}}]);
}catch(e){ret+=j._err(e,view,undefined);}
........ (cut to save space) ...........
return ret;
: "Unexpected token ;"

我能找到的唯一意外标记是“,;”在这部分:

view:view,tmpl:1,
    params:{args:['device_comment']},
    args:[data.device_comment],
    props:{}},;

现在,有趣的是,如果我找到并删除所有 {{else 块,模板将无错误地呈现(但当然不正确,因为我的页面需要基于 else 块的格式)。

我的问题是,这怎么可能? 在这些情况下,jsviews 想要做什么与 jsrender 不同? 为什么 else 块无法正确渲染?

编辑: 我下载了旧版本的 jsviews,v.0.9.83,然后将它与 jsrender v.0.9.83 一起使用,一切正常。我没有收到这个 {{else}}-block 问题。

我将保留这个问题,因为在较新的 jsviews 库中似乎存在问题。希望其他人会注意到这篇文章,而不必对其进行大量调试。

我将继续使用 v.0.9.83 工作。

【问题讨论】:

    标签: jsrender jsviews


    【解决方案1】:

    感谢您提出这个问题。实际上这是 v0.9.89 中引入的一个错误(所以以前的版本很好,直到 v0.9.88)。

    但只有在您设置了$.views.settings.debugMode(true); 时才会出现该错误。如果您将 debugMode 设置为 false,则一切正常。

    该错误已在 v0.9.90 版本中修复。

    顺便说一下,对于你给出的具体例子:

    {{if device_comment}}
        {{:device_comment}}
    {{else}}
        {{:device_name}}
    {{/if}}
    

    你可以用更简单的替换它:

    {{:device_comment||device_name}}
    

    这也避免了遇到这个问题......

    【讨论】:

    • 感谢您的快捷提示!我在这里使用的示例被简化以专注于错误,我的实际代码是在两个块中填充更多数据。将来是否有更好的地方报告错误或者这是可以接受的?感谢您的出色工作!
    • 报告错误的最佳位置是 GitHub 上的 JsRender 或 JsViews 问题跟踪器。 (见jsviews.com/#community)。事实上,将这个 bug 添加到 JsRender 问题跟踪器可能对您有好处。准备好后,我会在那里回复修复...
    • 我更新了我的答案,调出了 v0.9.90 中发布的修复程序。
    猜你喜欢
    • 2012-04-15
    • 2020-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-03
    • 2014-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多