【问题标题】:HTMLBars helper with inverseHTMLBars 逆向助手
【发布时间】:2015-05-03 14:57:13
【问题描述】:

我正在尝试构建一个带 else 块的助手。

我只能找到车把示例。他们表明 options.inverse 是一个函数,但对于我的 HTMLBars 助手,options.inverse 是一个对象。 (例如不可调用)

模板代码:

  {{#can 'audit' 'user' }}
    AUDIT_LINK_PLACEHOLDER
  {{else}}
    NO_AUDIT_LINK
  {{/can}}

帮助代码:

Ember.Handlebars.registerHelper("can", function(verb, noun, options) {
  var abilities =  this.container.lookup('controller:application').currentAbilities;
  var sub_ability = abilities[noun] || {};
  var fn = (sub_ability[verb] || sub_ability['manage']) ? options.fn : options.inverse;
  return fn(this);
});

【问题讨论】:

    标签: ember.js htmlbars


    【解决方案1】:

    通常您会将您的用户注入所有控制器,并且该用户将拥有 canAudit 属性:

    App.User = DS.Model.extend({
      canAudit: DS.attr('boolean')
    });
    

    你的模板应该是这样的:

    {{#if user.canAudit}}
      [ ... ]
    {{else}}
      [ ... ]
    {{/if}}
    

    如果您不想处理注入,并且您的应用程序控制器上已经有用户实例,那么最基本的方法是这样做:

    App.YourController = Ember.Controller.extend({
      needs: ['application'],
      user: Ember.computed.alias('controllers.application.user')
    });
    

    设置完成后,用户将可以在您的控制器中访问。

    你可以在这里找到你需要的一切,这取决于你想如何解决它:

    http://emberjs.com/api/classes/Ember.Controller.html#property_needs http://emberjs.com/api/#method_computed_alias

    http://emberjs.com/guides/understanding-ember/dependency-injection-and-service-lookup/

    【讨论】:

    • 感谢您的回复。我需要一个支持对 M 个对象执行 N 个操作的解决方案。在我的示例中,我询问当前用户是否具有对“用户”对象执行“审核”操作的能力或对“用户”对象具有“管理”能力(换句话说,该系统用户是否可以审核其他用户系统)。我猜这会导致以编程方式为用户模型生成 (N + 1) * M 种授权方法对于它的价值,在我上面的示例中,真实情况可以正常工作。它的逆(else 块)不起作用。
    • 啊!也许您可以使用一个子表达式,如下所示:{{#if (can 'audit' 'user')}}。一个 ember-cli 助手看起来像这样: export default Ember.Handlebars.makeBoundHelper(function(value1, value2) { ... });
    猜你喜欢
    • 1970-01-01
    • 2014-11-23
    • 1970-01-01
    • 2015-12-21
    • 1970-01-01
    • 2014-10-10
    • 2014-11-20
    • 2012-08-17
    • 1970-01-01
    相关资源
    最近更新 更多