0

我正在尝试构建一个带有 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);
});
4

1 回答 1

2

通常你会将你的用户注入到所有控制器中,并且用户将拥有 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/

于 2015-03-04T22:51:16.673 回答