【发布时间】: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 工作。
【问题讨论】: