Возможно, проще всего использовать существующую надстройку, если вы пытаетесь проверить разрешения/авторизацию. Я предлагаю ember-can или ember-sanctify (я считаю, что освящение поддерживает только 1.10 и более поздние версии).
То, что вы пытаетесь сделать, может быть проще рассуждать внутри компонента. На практике единственными причинами, которые я предлагаю для создания помощников, являются либо простые преобразования, либо возможность передать произвольное количество аргументов. Одна из вещей, которую Ember мог бы улучшить, — помочь пользователям понять, как делать более сложные вещи внутри помощника.
Пример компонента:
app/templates/components/test-can.hbs:
{{#boundIf hasPermission}}
{{yield}}
{{/boundIf
app/components/test-can.js:
import Ember from 'ember';
export default Ember.Component.extend({
permission: null,
controller: null,
hasPermission: function() {
//implement logic here
}.property('permission', 'controller')
});
Пример использования:
{{#test-can permission=read controller=controller}}
Your Content Here
{{/test-can}}
Не уверен, что такое read и controller в вашем примере, поэтому, если эти переменные ни на что не указывают, это мало что даст. Надеюсь это поможет.
Обновлять:
Итак, создаем файл по адресу app/helpers/test-can.js, который выглядит следующим образом
export default function(permissionName, options){
var permission = Ember.Object.extend({
testCan: function(){
return true;
}.property()
}).create();
// wipe out contexts so boundIf uses `this` (the permission) as the context
options.contexts = null;
return Ember.Handlebars.helpers.boundIf.call(permission, "testCan", options);
}
Не работает при тестировании? Приведенный выше пример, конечно, всегда будет возвращать true, поэтому всегда будет блок. 1.9.1 по-прежнему в основном использует тот же код для помощника if.
21.03.2015