Ember.js HTMLBars辅助程序与反向

Ember.js HTMLBars辅助程序与反向,ember.js,htmlbars,Ember.js,Htmlbars,我正在尝试构建一个带有else块的helper 我只能找到车把的例子。它们显示options.inverse是一个函数,但对于我的HTMLBars助手来说,options.inverse是一个对象。(例如不可赎回) 模板代码: {{#can 'audit' 'user' }} AUDIT_LINK_PLACEHOLDER {{else}} NO_AUDIT_LINK {{/can}} 助手代码: Ember.Handlebars.registerHelper("ca

我正在尝试构建一个带有else块的helper

我只能找到车把的例子。它们显示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);
});

通常情况下,您会将用户注入所有控制器,并且用户将拥有属性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')
});
设置此选项后,可以在控制器内访问用户

您可以在此处找到所需的一切,具体取决于您想如何解决:


谢谢您的回复。我需要一个在M个对象上支持N个操作的解决方案。在我的示例中,我询问当前用户是否有能力对“用户”对象执行“审核”操作,或者是否有能力对“用户”对象执行“管理”操作(换句话说,此系统用户可以审核系统的其他用户)。我想这将导致以编程方式为用户模型生成(N+1)*M个授权方法,在我上面的示例中,真实情况很好。相反(else块)不起作用。啊!也许您可以使用如下子表达式:{{#if(can'audit''user')}。ember cli帮助程序如下所示:导出默认的ember.handlebar.makeBoundHelper(函数(value1,value2){…});