簡體   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