Как написать хелперы в HTMLBars?

После последней версии EmberJS v1.9.0 я пытаюсь перейти от Handlebars к HTMLbars. Что я нахожу очень сложным, так это отсутствие документации.

Я пытаюсь реализовать очень простые помощники.

Например, возьмите помощников руля:

HTML

<div id="main"></div>

<script type="text/x-handlebars" data-template-name="index">
    {{logIt test}}
    <h1>{{test}}</h1>
</script>

JS

App = Ember.Application.create({
    rootElement: '#main'
});

    App.IndexRoute = Ember.Route.extend({
        setupController: function(controller){
            controller.set('test', 'mytest');
        }
    });

    Ember.Handlebars.registerHelper("logIt", function(something) {
        console.log(something);
    });

Скрипт Js: http://jsfiddle.net/sisir/p463q2L8/

Как преобразовать его в htmlbars?


person Sisir    schedule 20.02.2015    source источник
comment
Обновление Fiddle до Ember 1.10, с HTMLBars все еще работает - jsfiddle.net/qj6v3vuf - я не знаю, что являются планами команды Ember, но, возможно, даже если вы используете пространство имен Ember.Handlebars — внутренне оно направлено на HTMLBars. Единственный метод, который я вижу в HTMLBars, — это Em.HTMLBars.makeBoundHelper, который задокументирован как закрытый. Даже новый метод, который я отметил в stackoverflow. com/questions/28558696/ находится в пространстве имён Handlebars... Так что, может быть, просто пойдём по-старому :)   -  person licancabur    schedule 20.02.2015


Ответы (4)


Начиная с Ember 1.13, существует два API: http://emberjs.com/blog/2015/06/12/ember-1-13-0-released.html#toc_new-ember-js-helper.-api

Самый простой и распространенный синтаксис теперь таков:

export default Ember.Helper.helper(function(params, hash) {
  return params.join(' ');
});

Помощники получают два аргумента: params — это упорядоченные параметры, передаваемые помощнику, а hash содержит параметры «ключ-значение», например title="Mr.".

person kmiyashiro    schedule 20.07.2015

Начиная с Ember 1.10.0, этот вопрос решается выполнением Ember.HTMLBars.makeBoundHelper(theHelperFunction).

Редактировать: начиная с Ember 1.13.6 (31 июля 2015 г.), использование помечено как устаревшее.

УСТАРЕВАНИЕ: Использование Ember.HTMLBars._registerHelper устарело. Помощники (даже без тире) разрешаются автоматически. [идентификатор устаревания: ember-htmlbars.register-helper]

person dashdashzako    schedule 10.03.2015

Я считаю, что вы можете просто использовать Ember.Handlebars.helper, который есть в последней руководства по emberjs. Этот jsbin использует htmlbars и работает. Это помощник в jsbin

AppLogItHelper = Ember.Handlebars.helper("logIt", function(something){
  console.log(something);
});

Если вы используете ember-cli, он автоматически создаст его для вас, но он использует Ember.Handlebars.makeBoundHelper, который не работает в jsbin, но работает в моем ember- кли приложение.

person brg    schedule 21.02.2015
comment
Поскольку Ember 1.10.1 должен использовать Ember.HTMLBars.makeBoundHelper - person Abbasov Alexander; 01.08.2015

Очень важным нововведением является то, что HTMLBars имеют подвыражение! Поскольку Ember 1.10+ был переведен на HTMLBars, вам следует использовать Ember.HTMLBars.makeBoundHelper вместо Ember.Handlebars.registerHelper. Но вы все еще можете использовать Ember.Handlebars.registerHelper из версии Ember 1.10.1.

Новый подход:

App.XEqHelper = Ember.HTMLBars.makeBoundHelper(function(params, hash, options, env) {
    return params[0] === params[1];
    });

он вызывает из шаблонов как:

{{#if (x-eq order 'delivery_order')}}
    Need a delivery
{{/if}}
person Abbasov Alexander    schedule 30.07.2015