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

Можно ли вставлять помощников внутри хэша опций с рулями?

Например, есть способ вставить мой " i18n" помощник внутри другой хеш-хеш-переменной?

{{view "SearchView" placeholder="{{t 'search.root'}}" ref="search" url="/pages/search" className='home-search'  polyfill=true}}
4b9b3361

Ответ 1

Обновление: Handlebars теперь поддерживает subexpressions, поэтому вы можете просто сделать:

{{view "SearchView" (t 'search.root')}}

Ответ 2

Ваш сценарий не поддерживается напрямую, но есть несколько обходных решений, которые вы можете использовать. Помощники руля - это всего лишь код javascript, поэтому вы можете выполнить их из самого хелперного кода:

function translateHelper() {
    //...
}

function viewHelper = function(viewName, options) {
    var hash = options.hash;
    if(hash.placeholder) { 
        hash.placeholder = translateHelper(hash.placeholder);
    }
};

Handlebars.registerHelper('view', viewHelper);
Handlebars.registerHelper('t', translateHelper);

И просто передайте ключ i18n в качестве аргумента:

{{view placeholder="search.root"}}

Это хорошо, если ваш помощник знает, какие аргументы должны быть локализованы, а какие нет. Если это невозможно, вы можете попробовать запустить все вспомогательные аргументы через Handlebars, если они содержат выражение handlebars:

function resolveNestedTemplates(hash) {
  _.each(hash, function(val, key) {
    if(_.isString(val) && val.indexOf('{{' >= 0)) {
      hash[key] = Handlebars.compile(val)();
    }
  });
  return hash;
}

function view(viewName, options) {
  var hash = resolveNestedTemplates(options.hash, this);
}

И используйте описанный вами синтаксис вложенного шаблона:

{{view placeholder="{{t 'search.root'}}" }}

Я понимаю, что ни один из этих вариантов не идеален, но они самые лучшие, о чем я мог подумать.