使用辅助返回值作为另一个帮助程序或子表达式的参数值

时间:2014-11-10 12:42:28

标签: dust.js

总而言之,

查看是否可以直接在dust.js(linkedin'soriginal 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 pagethis pull request which added the feature部分。子表达式允许将一个帮助器嵌入为第二个帮助器的参数值,如我在第一个示例中所示。

也许我错过了更多尘埃来处理这个问题?因此任何指针都会受到赞赏。

感谢/和平

1 个答案:

答案 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
   }
}

所以现在,这些"逻辑"项目在模板中:

  • 包含我的消息的变量的名称
  • 我应该添加此数字以获得真实数字
  • 特殊号码4