WedX - журнал о программировании и компьютерных науках

Как создать хелпер руля Ember?

Привет всем

Я пытаюсь создать помощник

Handlebars.registerHelper('testCan', function(permissionName, options){
  var permission = Ember.Object.extend({
    testCan: function(){
      debugger;
      return true;
    }.property()
  }).create();

  // wipe out contexts so boundIf uses `this` (the permission) as the context
  options.contexts = null;

  Ember.Handlebars.helpers.boundIf.call(permission, "testCan", options)
});

И использовать его как

{{#testCan read controller=controller}}
    <h1>It's works</h1>
{{/testCan}}

Я делаю это для проверки шаблона отсюда https://livsey.org/blog/2012/10/16/writing-a-helper-to-check-permissions-in-ember-dot-js/

Но не работает((

Что случилось? Эмбер версия - 1.9.1

PPS изначально я работаю с существующим кодом (см. здесь Ember.handlebarsboundIf не вызывал вычисляемое свойство ) Но этот пример, который я получил при попытке воспроизвести/решить эту проблему

21.03.2015

  • Вы используете ember-cli? 21.03.2015
  • Ага. Проблема в следующем - я создаю простой помощник в проекте ember ember-cli. Но когда копирую в рабочий проект - не работает (( 21.03.2015

Ответы:


1

Возможно, проще всего использовать существующую надстройку, если вы пытаетесь проверить разрешения/авторизацию. Я предлагаю 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
  • Иногда я должен передавать параметры в помощник, поэтому я создаю собственный помощник вместо создания свойства помощника во всех моделях. 21.03.2015
  • Спасибо за предложение, но это не ответ 21.03.2015
  • Извините, я забыл раздел yield в приведенном выше примере. Есть ли причина, по которой у вас не работает один из аддонов Ember? 21.03.2015
  • У меня есть код, который отлично работает в текущей версии ember (1.7.0). Теперь я хочу перейти на новейшую версию, поэтому я говорю о существующем коде (исходная проблема здесь stackoverflow.com/questions/29182806/ - описан случай, который мне нравится при попытке решить Это ) 21.03.2015
  • У меня ошибка Handlebars: не удалось найти свойство testCan для объекта (сгенерированный контроллер приложения). 21.03.2015

  • Новые материалы

    Как создать диаграмму градиентной кисти с помощью D3.js
    Резюме: Из этого туториала Вы узнаете, как добавить градиентную кисть к диаграмме с областями в D3.js. Мы добавим градиент к значениям SVG и применим градиент в качестве заливки к диаграмме с..

    Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что это выглядит сложно…
    Просто начните и учитесь самостоятельно Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что он кажется мне сложным, и я бросил его. Это в основном инструмент..

    Лицензии с открытым исходным кодом: руководство для разработчиков и создателей
    В динамичном мире разработки программного обеспечения открытый исходный код стал мощной парадигмой, способствующей сотрудничеству, инновациям и прогрессу, движимому сообществом. В основе..

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..


    Для любых предложений по сайту: [email protected]