Leaf 4.4.0中在extend块内用if条件语句报错,求解决方法
Leaf 4.4.0模板条件化export报错问题解决
问题场景
想要通过检查上下文对象字段,让staff.leaf向master.leaf的#import("body")传递条件化数据,编写的代码如下:
staff.leaf 代码
#extend("master"): #export("title"):Staff#endexport #export("h1"): Hello there! #endexport #if(name): #export("body"):#(name) is the name#endexport #else: #export("body"):No name!#endexport #endif #endextend
master.leaf 代码
<html> <head> <title>#import("title")</title> </head> <body> <h1>#import("h1")</h1> #import("body") #extend("footer") </body> </html>
报错信息
{"reason":"unexpected token in extend body: conditional:\n if(variable(name)):\n raw("\n")\n export("body"):\n expression[variable(name)]\n raw(" is the name")\n raw("\n")\n else:\n raw("\n")\n export("body"):\n raw("No name!")\n raw("\n").. use raw space and `export` only","error":true}
解答
是否支持?
Leaf 4.4.0 不支持在#extend代码块内用条件语句直接包裹#export操作,报错信息也明确指出:extend的内容里只能包含原始文本和export指令。
正确实现方式
方式1:将条件逻辑放到#export内部
把条件判断写在#export("body")的内容区域,而不是用条件语句包裹整个export:
#extend("master"): #export("title"):Staff#endexport #export("h1"): Hello there! #endexport #export("body"): #if(name): #(name) is the name #else: No name! #endif #endexport #endextend
方式2:先定义变量存储结果再导出
先通过条件判断生成内容存入临时变量,再将变量导出给body:
#extend("master"): #export("title"):Staff#endexport #export("h1"): Hello there! #endexport #let bodyContent = if(name) { "#(name) is the name" } else { "No name!" } #export("body"):#(bodyContent)#endexport #endextend
内容的提问来源于stack exchange,提问作者velo35
相关产品推荐
相关产品推荐

