HTMLBars 助手与逆
HTMLBars helper with inverse
我正在尝试构建一个带 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);
});
通常你会把你的用户注入到所有控制器中,并且用户会有 属性 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/
我正在尝试构建一个带 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);
});
通常你会把你的用户注入到所有控制器中,并且用户会有 属性 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/