是否可以将助手嵌套在带有把手的选项哈希中?
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 存储库问题中问了同样的问题.. 让我们看看他们的想法,但我同意你.. 它不能嵌套太多,如果是这样我就不得不移动它到范围,因为模板代码将不可读以上是关于是否可以将助手嵌套在带有把手的选项哈希中?的主要内容,如果未能解决你的问题,请参考以下文章