是否可以将助手嵌套在带有把手的选项哈希中?

Posted

技术标签:

【中文标题】是否可以将助手嵌套在带有把手的选项哈希中?【英文标题】:Is it possible to nest helpers inside the options hash with handlebars? 【发布时间】:2013-01-24 18:29:39 【问题描述】:

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

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

【问题讨论】:

您的抱怨是什么?帮助程序中的mustache 语法,或者您必须将本地化值传递给帮助程序的事实? 你说得对,我想在帮助器中使用 mustache 语法,而不是将本地化值传递给帮助器。我将编辑我的问题,请稍等。 问题在于把手不允许您在辅助选项中使用 mustache 语法 @mateusmaso,如果您碰巧在附近阅读此评论,您能否不接受我的回答并接受 KevinBorders 的回答,因为它确实是更好的答案。当我写我的时候,这个功能还不支持。 @jevakallio 已更新 :) 【参考方案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 运行所有辅助参数,如果它们包含一个把手表达式:

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'" 

我意识到这两个选项都不是完美的,但它们是我能想到的最好的。

【讨论】:

谢谢伙计,顺便说一句,答案很好..正如您所说,我的 translateHelper 也可以采取更多选择,因此您的第二个解决方案可能是目前最好的解决方法,我只会改进方法,但想法还是一样..我只是想知道如果这样做我会在车把应该如何真正工作方面犯错误 @mateusmaso,我提出的解决方案并不完全是车把应该如何工作,我会同意你的,但另一方面,我没有看到一个很好的替代方案来解决你的特定问题。也许查看部分和块助手,看看是否有更自然的解决方案适合您的情况:github.com/wycats/handlebars.js 是的,我在他们的 github 存储库问题中问了同样的问题.. 让我们看看他们的想法,但我同意你.. 它不能嵌套太多,如果是这样我就不得不移动它到范围,因为模板代码将不可读

以上是关于是否可以将助手嵌套在带有把手的选项哈希中?的主要内容,如果未能解决你的问题,请参考以下文章

安卓7和8系统,手把手教你获取root授权

有没有办法获取选项标签值并将其传递给车把中的助手?

Catel 中的嵌套验证

什么是选项哈希?

带有或不带有 Twitter Bootstrap 的嵌套侧边栏

请问微信群助手在哪里