web-dev-qa-db-fra.com

Est-il possible d'imbriquer des aides à l'intérieur du hachage d'options avec un guidon?

Par exemple, existe-t-il un moyen d'imbriquer mon assistant "i18n" dans la variable de hachage d'un autre assistant?

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

Mise à jour: Le guidon prend désormais en charge sous-expressions , vous pouvez donc simplement faire:

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

Votre scénario n'est pas directement pris en charge, mais vous pouvez utiliser quelques solutions de contournement. Les assistants de guidon ne sont que du code javascript, vous pouvez donc les exécuter à partir du code d'assistance lui-même:

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);

Et passez simplement la clé i18n à comme argument:

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

C'est bien, tant que votre assistant sait quels arguments doivent être localisés et lesquels ne le sont pas. Si cela n'est pas possible, vous pouvez essayer d'exécuter tous les arguments d'assistance via les guidons, s'ils contiennent une expression de guidon:

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);
}

Et utilisez la syntaxe de modèle imbriquée que vous avez décrite:

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

Je me rends compte qu'aucune de ces options n'est parfaite, mais elles sont les meilleures auxquelles je pouvais penser.

11
jevakallio