如何在 Handlebars 辅助表达式中传递字符串作为参数?

JP *_*Lew 5 javascript handlebars.js

我正在尝试创建自己的 Handlebars 助手,但在传递参数时遇到问题。对于上下文,我正在尝试破解 Ghost ( http://tryghost.org ),但我怀疑这是一个更普遍的车把问题。

在职的

首先,一个工作示例。这是我的模板的相关部分:

<h1>{{myHelper}}</h1>
Run Code Online (Sandbox Code Playgroud)

这是我的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"
})
Run Code Online (Sandbox Code Playgroud)

不工作

以下是我想要实现的目标。模板:

<h1>{{myHelper "title"}}</h1> 
<h3>{{myHelper "slug"}}</h3>
Run Code Online (Sandbox Code Playgroud)

当我尝试将参数传递给方法时,它无法替换变量:

ghost.registerThemeHelper("myHelper", function(myData) { 
    console.log(this.posts[0].myData); // outputs "undefined" to console
    return this.posts[0].myData; // returns nothing
})
Run Code Online (Sandbox Code Playgroud)

传递像“title”这样的字符串以便在表达式中对其进行求值的正确方法是什么?

activateTheme()对于任何好奇的 Ghost 用户,我在函数中注册了自己的助手ghost/core/server.js

mu *_*ort 3

console.log的输出arguments

{ '0': 'title', '1': { hash: {}, data: { blog: [Object] } } }
Run Code Online (Sandbox Code Playgroud)

表明助手的第一个参数是'title'当你说 时{{myHelper "title"}}。如果this.posts[0]这是您感兴趣的帖子,那么您需要查看:

this.posts[0][myData]
Run Code Online (Sandbox Code Playgroud)

获取when istitle的属性。请注意,方括号用于访问普通数组(由非负整数索引)和对象(由字符串索引)。this.posts[0]myData'title'

花一点时间阅读MDN JavaScript参考可能会有所帮助。