将jsrender迁移到jsviews {{else}} - 问题

时间:2017-11-02 00:05:37

标签: jsrender jsviews

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 ;"

我能找到的唯一意想不到的标记是&#34;,;&#34;在这一部分:

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}} - 阻止问题。

我会将这个问题保持开放,因为在较新的jsviews库中似乎存在问题。希望其他人会注意到这篇文章而不必调试它。

我将继续我的工作v.0.9.83。

1 个答案:

答案 0 :(得分:2)

感谢你这么说。事实上,这是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}}

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