Подтвердить что ты не робот

Передача произвольных аргументов помощникам руля?

извините, если об этом спрашивали миллионы раз, но я не могу найти удовлетворительный ответ где угодно.

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

{{i18n yml.text.definition count=2 name="Alex" ... param="hello}}

который преобразуется в вызов следующим образом:

i18n.t("yml.text.definition", { count: 2, name: "Alex", ... param: "hello"})

Возможно ли это, или я полностью из своего дерева?

4b9b3361

Ответ 1

Дайте следующий помощник:

{{myHelper "foo" this ... key=value ...}}

Вы можете получить данные со следующим объявлением:

Ember.Handlebars.helper('name', function(param1, param2, options) {
  param1 // The string "foo"
  param2 // some object in that context
  options.hash // { key: value }
});

Каждый параметр функции - это параметр, переданный в {{myHelper param1 param2}}. Но остальное будет объектом с некоторой специальной/частной информацией. С помощью этого объекта вы получаете информацию о ключе = значение, используя хэш-объект.

Если задан параметр, предоставленный помощнику, например "param1", строка возвращается, в противном случае она разрешена для некоторого объекта в этом контексте.

В вашем случае вам понадобится:

Ember.Handlebars.helper('i18n', function(property, options) {        
    var hash = options.hash;    
    return 'i18n.t(' + property + ', { count: ' + hash.count + ', name: ' + hash.name + ', param: ' + hash.param + '})';
});

Вот jsfiddle с этим рабочим http://jsfiddle.net/marciojunior/64Uvs/

Я надеюсь, что это поможет

Ответ 2

Попробуйте следующее:

Ember.Handlebars.registerBoundHelper('i18n', function(context, block) {
  return i18n.t(context, { count: block.hash.count, name: block.hash.name, ... param: block.hash.param}); 
});