我有一个html 5 Angular应用程序,需要最终用户自定义业务报告。后端Node REST api为报告提供JSON数据。
我正在考虑的解决方案是使用Handlebars作为报告模板“引擎”。数据将来自服务器,附带一个模板,该模板将在运行时在客户端进行编译并显示在页面上。
用户可以自定义模板并将其保存回来。
关键点是总计。我想在模板中执行此操作,并且我已尝试制作自定义帮助程序,但我无法可靠地保持状态。
以下是我的尝试:
Handlebars.registerHelper('runningTotal', function(k, v, r) {
//k=Key, v=numeric value, r='root' key in the json data
if (!r[k]) {
r[k] = v;
} else {
r[k] += v;
}
return r[k]; });
在我的模板中,我称之为:
'{{runningTotal "labor" lineTotal ../../../rptState}}' +
'{{/each}}' +
传递给“runningTotal”帮助器的参数是“labor”,它是存储运行总计的键的名称,“lineTotal”,它是需要保持总计的现有JSON数据键的名称,最后是“rptState”,它是现有的JSON数据密钥,用于保存运行总计。
JSON数据对象在顶层添加了一个自动空对象键,称为rptState,用于保存此类数据。
我所看到的是它在每个块结束之前都能正常工作,此时似乎JSON数据“重置”回原来的状态并且我的助手添加的键丢失了。这意味着我不能做总计,甚至不能正确打印每个块底部的运行总计,因为它在每个块的末尾重置。
我是否正确地解决了这个问题,只是错过了一些细节,还是完全有更好的方法?