从循环内的父上下文更改/更新Handlebars JS中的变量

时间:2018-01-29 15:47:08

标签: javascript jquery html handlebars.js handlebarshelper

我已经看到很多关于如何访问变量的示例,该变量属于循环内的父上下文。但是,我不仅需要访问变量,还需要更改/更新变量。

正如你在下面看到的,我有一个设置变量的自定义帮助器,但是当我尝试在循环中更改该变量时,它不起作用。有没有办法让它发挥作用?

请查看 jsFiddle

模板

evalresults

带助手的句柄初学者

evaluation

1 个答案:

答案 0 :(得分:2)

答案,就像在JavaScript中一样,是范围。基本上,在this循环内部使用时,助手setVarWithName内的data并未指向{{#each}}变量,但它确实指向question[@index]。你需要做什么:

var source = $("#template").html(); 
var template = Handlebars.compile(source); 

var data = {
  "questions": [
     {"title": "Question 1"},
     {"title": "Question 2"}
   ]
}; 

Handlebars.registerHelper('setVarWithName', function (name, value) {
    data[name] = value; // changed from this to data
    return '';
});

$('body').append(template(data));

查看我的工作fiddle。为了便于阅读,我添加了{{s}}帮助程序将已呈现的this打印到模板中。