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。
答案 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}}
这也避免了遇到这个问题......