2016-01-27 1 views
0

У меня есть этот зарегистрированный помощник руля в ember1.7 прямо сейчас.Как перевести помощники руля типа #if из ember 1.7 в ember-cli (2.3)

var get = Ember.Handlebars.get; 
Ember.Handlebars.registerHelper('ifCond', function(val1, val2, options) { 
    var context = (options.fn.contexts && options.fn.contexts[0]) || this; 
    var val1 = get(context, val1, options.fn); 
    if (val1 == val2) { 
     return options.fn(this); 
    } else { 
     return options.inverse(this); 
    } 
}); 

Идея довольно проста: взять первый параметр как свойство контекста, второй параметр в качестве фактического значения и возвращает логическое значение на основе их равенства. Так, например, если у меня есть свойство возраста на пользователем объекта,

{{#ifCond user.age "22" }} 
    <h2> Twin Twos!</h2> 
{{/ifCond}} 

будет сниппет я хотел бы использовать, чтобы сделать элемент h2, когда условие выполняется.

Однако я не могу понять, как перевести такого помощника на ember-cli.

Я рассмотрел возможность создания компонента, но мне нужен условный, а не тот, который отображает определенный набор элементов DOM. Я чувствую, что что-то упускаю. Как я смогу сделать {{#ifCond}} работу в Ember 2.3?

EDIT: Я нашел документ создания помощник, который позволит мне этой реализации:

import Ember from 'ember'; 

export function ifCond(params/*, hash*/) { 
    return (params[0] === params[1]); 
    // return params; 
} 

export default Ember.Helper.helper(ifCond); 

однако, для того чтобы это работало, я должен был бы написать (в шаблоне)

{{#if (ifCond 1 1)}} 
    yep 
{{/if}} 

Есть ли еще способ использовать помощник руля, как мы могли бы в ember 1.7?

+1

Публиковать это в качестве комментария, так как это не прямой ответ, но я рекомендую посмотреть [ember-truth-helpers] (https://github.com/jmurphyau/ember-truth-helpers). Очень полезный и надежный аддон. – locks

+0

После изучения немного больше, ваш ответ после редактирования - лучший путь вперед, если вы не хотите вводить дополнительную зависимость. – locks

+0

Спасибо, что посмотрели. Из моего собственного исследования также кажется, что это ... принятая «каноническая» эволюция помощника рулей. Я уточню его как правильный ответ. – Darshan

ответ

0

Прежде всего есть no more block helpers:

Помощники помощников Handelbars удаляются в пользу Ember.Helper API. Этот API не предоставляет механизм для помощников для принятия блока , но вводит поддержку вложенных помощников, которые могут использоваться совместно со встроенными помощниками (например {{#if}} и ​​{{#each}}) до достичь тех же целей.

Рекомендуется использовать помощников так же, как в вашем примере ({{#if (ifCond 1 1)}}). Если вы решите пойти по этому маршруту, я бы рекомендовал использовать аддон ember-truth-helpers.С его помощью вы можете бросить свой собственный помощник и использовать его как это:

{{#if (eq user.age "22") }} 
    <h2> Twin Twos!</h2> 
{{/if}} 

Я нахожу хелперы правда очень гибкий и легко понять, и рекомендовал бы использовать их.

Альтернативно, если вы хотите имитировать свой старый помощник, вам нужно использовать компонент для этого, у меня есть made a twiddle, чтобы проиллюстрировать, как вы могли это сделать.

+0

Ах. Интересно. Помощники Ember-правда помогают, но этот ответ также дает бонус за то, как компоненты могут использоваться для возврата значения. – Darshan

0

После долгой работы, кажется, что редактирование вопроса - лучший способ продвижения вперед. Кажется, это приемный способ помощников руля.

Чтобы создать помощника, эмулировать:

import Ember from 'ember'; 

export function ifCond(params/*, hash*/) { 
    return (params[0] === params[1]); 
    // return params; 
} 

export default Ember.Helper.helper(ifCond); 

Затем включить его в шаблон в этом формате.

{{#if (ifCond 1 1)}} 
    yep 
{{/if}} 

Эта ссылка указал мне в правильном направлении: https://guides.emberjs.com/v2.3.0/templates/writing-helpers/

И это один показал мне именно то, что может быть сделано: http://emberigniter.com/how-to-equals-conditional-comparison-handlebars/

Смежные вопросы