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



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:{}},;

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

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

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

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

我将继续我的0.9.83版本的工作。

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

这也避免了触及这个问题。。。

最新更新