Meteor 是不是支持嵌套助手(子表达式)?

Posted

技术标签:

【中文标题】Meteor 是不是支持嵌套助手(子表达式)?【英文标题】:Are nested helpers (subexpressions) supported in Meteor?Meteor 是否支持嵌套助手(子表达式)? 【发布时间】:2014-07-03 19:17:27 【问题描述】:

我会用这个:http://handlebarsjs.com/expressions.html#subexpressions

outer-helper (inner-helper 'abc') 'def'

但是流星给我一个错误...有一些使用嵌套助手的解决方案或解决方法吗?

谢谢!

【问题讨论】:

【参考方案1】:

我认为这部分文档:http://docs.meteor.com/#ui_registerhelper,这部分 http://docs.meteor.com/#template_helpers 应该回答您的问题。

此外,流星模板语言称为 spacebars,虽然受到 handlebars 的启发,但它有一些不同之处,更多内容请阅读此处:https://github.com/meteor/meteor/blob/devel/packages/spacebars/README.md

这会给我们:

// template
<template name="_maybeDiv_wrapInDiv">
  <div>
    > UI.contentBlock
  </div>
</template>

<template name="_maybeDiv_noop">
  > UI.contentBlock
</template>

// client code
UI.registerHelper('maybeDiv', function () 
  var isBlock = this.valueOf();

  if (isBlock)
    return Template._maybeDiv_wrapInDiv;
  else
    return Template._maybeDiv_noop;
);

你可以像这样使用它

#maybeDiv true
  contents
/maybeDiv

【讨论】:

对不起,但我不明白我的问题的答案在哪里......是否可能,嵌套助手调用,就像在 Handlebar 中一样?以及如何? mhhh...以及像 outer-helper (inner-helper 'abc') 'def' 这样的嵌套助手(子表达式)在哪里? 如果这回答了这个问题,那么它的解释工作就很糟糕。我看不到那里的嵌套助手。如果可以的话,我会对此投反对票。 #maybeDiv true contents /maybeDiv 用另一个助手替换内容,你有嵌套助手。 我不明白。似乎是hackish。【参考方案2】:

嵌套助手:如果有一个位置参数后跟其他(位置或关键字参数),则使用正常的助手参数调用约定在其他参数上调用第一个参数。

将 helperB 传递给 helperA

helperA helperB

将 'helperB with argument x' 传递给 helperA

helperA helperB x

将带有参数 x=false 的“helperB”传递给 helperA

helperA helperB x=false

空格键包含和块参数

https://github.com/meteor/meteor/blob/devel/packages/spacebars/README.md#inclusion-and-block-arguments

【讨论】:

如果我想将一个参数传递给 helprA 并将一个参数传递给 helperB(参见我上面的示例) 那么块辅助语法将更加明确和可维护#outer-helper def inner-helper abc /outer-helper 另一个例子&lt;button type="submit" class="btn btn-primary "&gt; #spinnerIf processing#if addModeAddelseEdit/if/spinnerIf &lt;/button&gt; 能回答你的问题吗? 我的问题真的很老了……我记不太清了。顺便说一句,您使用块助手而不是简单的助手来允许嵌套调用。这不一样......例如,我只能将一个参数传递给块助手。 据我所知(handlebarsjs.com/expressions.html#subexpressions)对于流星来说是不可能的【参考方案3】:

现在 1.2 版可以实现这一点

<p>
    Together we have
    pluralize (add myWidgetCount yourWidgetCount), "widget"
</p>

https://quip.com/RXFlAk9Rc2xI#dbfACAYxaJX

【讨论】:

以上是关于Meteor 是不是支持嵌套助手(子表达式)?的主要内容,如果未能解决你的问题,请参考以下文章

notepad++ 正则表达式引擎 (scintilla) 是不是支持子字符串转义(smth. like "\Q.*[escaped string]()+\E")?

不使用 EXISTS 嵌套 case 语句引入子查询时,选择列表中只能指定一个表达式

MySQL-子查询,派生表,通用表达式

不支持的子查询表达式“时尚”:子查询表达式仅引用外部查询表达式

Meteor:从另一个助手访问模板助手(或变量)

在模板上下文中从另一个助手调用一个助手 (Meteor 0.9.4)