查看是否可以直接在dust.js(linkedin's或original flavor)中使用一个助手的返回值作为参数,例如
you have {@math key="{@size key=list/}" method="add" operand="4"/} new messages
假设@size
会返回一些标量值,如3
,如果列表是:
{
"list": ["msg1", "msg2", "msg3"]
}
到目前为止,似乎无法获得SyntaxError: Expected buffer, comment, end of input, partial, raw, reference, section or special but "{" found. At line : 1, column : 10
错误。
我假设我可以创建/使用一个帮助器,它可以从第一个size
帮助器的返回值在上下文中设置一个值,然后在第二个{重复使用该值(本质上是一个临时变量)中重用{ {1}}帮手。例如,这个provide helper似乎只是这样做:
math
但是,我希望避免这些额外的步骤,例如支持子表达式的Handlebars:请参阅Subexpressions on this page和this pull request which added the feature部分。子表达式允许将一个帮助器嵌入为第二个帮助器的参数值,如我在第一个示例中所示。
也许我错过了更多尘埃来处理这个问题?因此任何指针都会受到赞赏。
感谢/和平
答案 0 :(得分:0)
"尘土般的"处理这个的方法是编写一个完全符合你想要的上下文函数,从而从模板中删除所有逻辑。
通过嵌套帮助程序,您在Dust的视图中为模板添加了太多逻辑。 (这不是唯一正确的观点,但这是Dust的观点。)
这也使您能够利用Dust的超级方便的块语法,它为您提供了一个免费的假else
块,并允许您创建额外的块以从中提取任何剩余的逻辑模板。
因此,您应该使用以下模板解决此问题:
You have {#numMessages}{.} messages!{:else}no messages at all.{/numMessages}
上下文功能:
{
"list": ["msg1", "msg2", "msg3"],
"numMessages": function(chunk, context) {
// return this.list.length + 4; // this works if list is in the same context
return context.get("list").length + 4; // safer, finds list by walking the context tree
}
}
所以现在,这些"逻辑"项目在模板中: