首页 文章

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

提问于
浏览
0

我已经创建了一个概念证明,可以使用依赖项来查看here . 问题是:Handlebars 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) return compiled.call(this,context,execOptions); }

1 回答

  • 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) .

相关问题