将 jsrender 迁移到 jsviews {{else}}-issue
Migrating jsrender to jsviews {{else}}-issue
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 库中似乎存在问题。希望其他人会注意到这一点 post 而不必对其进行大量调试。
我将继续使用 v.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}}
这也避免了遇到那个问题...
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 库中似乎存在问题。希望其他人会注意到这一点 post 而不必对其进行大量调试。
我将继续使用 v.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}}
这也避免了遇到那个问题...