[英]Passing an Array to Handlebars Custom Helper
我正在尝试使用express-handlebars将一组数据传递给自定义助手。 我无法让它工作。
我可以传入一个字符串,也可以将一个数组传递给单个视图,但我似乎无法将数组传递给自定义助手。 这是我的代码:
传递给自定义助手的字符串(这有效)
// app.js
const hbs = expressHandlebars.create({
extname: 'html',
helpers: {
foo: function () {
return 'FOO!'
}
})
// views/layout/main.html
<h2>{{ foo }}</h2>
// Result --> FOO! outputed as expected
将数组传递给单个视图(这也有效)
// controllers/pageControllers.js
exports.getIndexPage = (req, res) => {
res.render('index', {
testList: ['one', 'two', 'three']
})
}
// views/index.html
{{#each testList}}
<div>{{this}}</div>
{{/each}}
// Result --> one, two, three outputted as expected
数组传递给自定义助手(这不起作用)
// app.js
const hbs = expressHandlebars.create({
extname: 'html',
helpers: {
testList2: function () {
return ['one', 'two', 'three']
},
}
})
// views/layout/main.html
{{#each testList2}}
<div>{{this}}</div>
{{/each}}
// Result --> NOTHING. No output, no error messages.
自定义助手不带 arrays 吗? 相同的代码适用于单个视图。 相同的代码适用于自定义助手上的字符串。 它只是不适用于自定义助手上的数组。
如果自定义助手不接受 arrays,那么如何将一组数据放入我的主布局文件中? 如果它确实需要一个数组,那么我做错了什么以及如何让它工作?
谢谢。
根据文档#helpers ,-我自己没有使用express-handlebars
。
Handlebars 助手调用是一个简单的标识符,后跟零个或多个参数(用空格分隔)
这意味着您使用第一个标识符调用它,然后将对其进行评估。
助手只是接收数据并输出一个经过处理的结果以注入到视图中。
接收数据看起来像{{ foo exp1 exp2 }}
转换为{{foo(exp1,exp2)}}
并且助手看起来像这样。
foo: function (exp1, exp2) {
return `this is ${exp1} and ${exp2}`
}
这就像调用常规 function。
在您的第一个示例中,您调用foo()
(辅助函数),它什么都不接受,只输出一个字符串,当激活时,您会得到返回值。
在您的第二个示例中,您使用 express 来呈现在视图上可循环的变量。 与车把实例创建无关。 (您基本上是在创建一个快速res.locals.testList
变量。)
在您的第三个示例中,您尝试循环帮助程序 function 而不是真正调用它。 它试图做这样的事情:
for(let v of function() {}) {
//...
}
这将给出错误(在你的情况下可能是沉默的) is not iterable
似乎您应该操作助手 function 中的数据数组,然后返回一个字符串或 html 字符串(使用 Z534F19BE86FF60EA96BBF80B90 文档中提到的Handlebars.Safestring
)。 然后在您看来,只需将其称为{{ testList2 }}
,它将为您尝试执行的结构提供现成的HTML
。
希望这是有道理的。
话虽如此,文档中提到了使用助手的更高级方法。 这可能更适合您尝试做的任何事情。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.