[英]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.