### [Handlebars 动态变量名:在 JS 层预处理](https://www.huociguo.com/article/1547) **Published:** 2026-09-30T05:31:30 **Author:** 米了 **Excerpt:** 模板语法是静态的,拼接出的字符串不会被当成变量名。做法是在传入模板前把键映射成值,含 lookup 用法与预处… Handlebars 的模板语法在编译期确定,运行期拼出来的字符串不会被当成变量名解析。期望用 `{{result[0]}}` 这类写法按索引取变量,模板只会把它当成一条普通路径,输出为空或原样保留。  变量名的解析发生在编译期,动态取值要前置到数据层 ## 能做的一件事:lookup ```handlebars {{lookup this fieldName}} ``` ```js const html = template({ fieldName: 'title', title: '示例标题' }); ``` lookup 接收对象与键名,适合字段名来自变量、层级只有一层的场景。嵌套路径与表达式拼接仍然不支持。 ## 更通用的做法:在 JS 层预处理 ```js const keys = ['title', 'author', 'date']; const data = { rows: list.map((row) => ({ cells: keys.map((key) => ({ key, value: row[key] ?? '' })) })) }; const html = template(data); ``` ```handlebars {{#each rows}}