繁体   English   中英

修复同构JS应用中的把手编译问题

[英]Fixing Handlebars compile issue in isomorphic JS app

我正在将现有的Web应用程序变成同构的。 我已经创建了一个概念证明,可以处理您在这里可以检查的依赖关系。 问题是:把手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){如果(!compiled){编译= compileInput(); 返回已编译的调用(this,context,execOptions); }

如果这是isServer ? view(data) : handlebars.compile(view)(data) 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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM