我正在尝试创建自己的Handlebars助手,但是在传递参数时遇到了问题。对于上下文,我正在尝试攻击Ghost(http://tryghost.org),但我怀疑这是一个更普遍的Handlebars问题。
首先,一个工作的例子。以下是我的模板的相关部分:
<h1>{{myHelper}}</h1>
这是我的Handlebars.registerHelper
方法(Ghost重命名,但它是相同的):
ghost.registerThemeHelper("myHelper", function() {
console.log(this.posts[0].title); // outputs "Welcome to Ghost" to console
return this.posts[0].title; // returns "Welcome to Ghost"
})
以下是我想要实现的目标。模板:
<h1>{{myHelper "title"}}</h1>
<h3>{{myHelper "slug"}}</h3>
当我尝试将参数传递给方法时,它无法替换变量:
ghost.registerThemeHelper("myHelper", function(myData) {
console.log(this.posts[0].myData); // outputs "undefined" to console
return this.posts[0].myData; // returns nothing
})
传递像“title”这样的字符串的正确方法是什么才能在表达式中进行评估?
对于任何好奇的Ghost用户,我在activateTheme()
ghost/core/server.js
函数中注册了我自己的帮助器
答案 0 :(得分:3)
arguments
的console.log
输出:
{ '0': 'title', '1': { hash: {}, data: { blog: [Object] } } }
当你说'title'
时,建议助手的第一个参数为{{myHelper "title"}}
。如果this.posts[0]
是您感兴趣的帖子,那么您需要查看:
this.posts[0][myData]
在title
为this.posts[0]
时获取myData
的{{1}}属性。请注意,方括号用于访问正常数组(由非负整数索引)和对象(由字符串索引)。
MDN JavaScript引用中的一段时间可能会有所帮助。