【问题标题】: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'}}

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

谢谢!

【问题讨论】:

    标签: meteor handlebars.js spacebars


    【解决方案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 addMode}}Add{{else}}Edit{{/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

    【讨论】:

      猜你喜欢
      • 2017-02-12
      • 1970-01-01
      • 2011-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多