backbone.js 有没有可能在选项散列中嵌套带有手柄的助手?

yvgpqqbh  于 2022-11-10  发布在  其他
关注(0)|答案(2)|浏览(138)

例如,有没有办法将我的“i18n”助手嵌套在另一个助手的哈希变量中?

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

gywdnpxw1#

**更新:**手柄现在支持子表达式,因此您只需执行以下操作:

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

svgewumm2#

您的场景并不直接受支持,但您可以使用一些变通方法。手柄助手只是javascript代码,因此您可以在助手代码本身中执行它们:

  1. function translateHelper() {
  2. //...
  3. }
  4. function viewHelper = function(viewName, options) {
  5. var hash = options.hash;
  6. if(hash.placeholder) {
  7. hash.placeholder = translateHelper(hash.placeholder);
  8. }
  9. };
  10. Handlebars.registerHelper('view', viewHelper);
  11. Handlebars.registerHelper('t', translateHelper);

并将i18n密钥作为参数传递给:

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

这是很好的,只要你的助手知道哪些参数应该本地化,哪些不应该。如果这不可能,你可以尝试通过Handlebar运行所有的助手参数,如果它们包含一个handlebar表达式:

  1. function resolveNestedTemplates(hash) {
  2. _.each(hash, function(val, key) {
  3. if(_.isString(val) && val.indexOf('{{' >= 0)) {
  4. hash[key] = Handlebars.compile(val)();
  5. }
  6. });
  7. return hash;
  8. }
  9. function view(viewName, options) {
  10. var hash = resolveNestedTemplates(options.hash, this);
  11. }

并使用您描述的嵌套模板语法:

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

我知道这两个选择都不完美,但它们是我能想到的最好的。

展开查看全部

相关问题