修复Handlebars在isomorphic JS app中编译问题

时间:2016-01-11 15:00:22

标签: javascript node.js handlebars.js isomorphic-javascript

我正在将现有的网络应用变成同构的。 我已经创建了一个概念证明来解决您可以检查here的依赖关系。问题是:处理程序compile()在服务器和客户端的行为不同,因为这些平台上的模板需要/导入方式不同。

var view = require('someView.hbs');
var data = {};
var content = isServer ? view(data) : handlebars.compile(view)(data);

在现有的应用程序中,我需要通过注入上面的条件来重写大量代码。有没有更好的方法来统一这个,摆脱这个条件?如何在两边以相同的方式导入模板?

更多信息:

  • 我使用stringify:require('stringify')

  • 如果我在服务器端运行handlebars.compile(view)(data),我会收到以下错误:

  

错误:您必须将字符串或Handlebars AST传递给Handlebars.compile。你传递了函数ret(context,execOptions){       if(!编译){         compiled = compileInput();       }       return compiled.call(this,context,execOptions);     }

1 个答案:

答案 0 :(得分:0)

如果此isServer ? view(data) : handlebars.compile(view)(data)在任何地方都适用,您可以创建一个函数

var my_render = function(view,data) {
  return isServer ? view(data) : handlebars.compile(view)(data);
}

然后将content = my_render(view,data)放在您需要的位置。

也许更好的解决方案是:

var my_compiled_hb = isServer ? view : handlebars.compile(view);

然后在您需要的地方使用content = my_compiled_hb(data)