簡體   English   中英

一般將小胡子模板轉換為 JSON object

[英]Generally convert a mustache template to a JSON object

當使用 Mustache 或任何模板引擎時,需要一個結構正確的 JSON object 來渲染一些特定的模板。 通常(我相信),開發人員知道他們的應用程序的數據 model,以及他們希望如何在模板中顯示數據,但發現他們的數據 model 並不完全符合他們的模板所期望的形式 output JSON。 所以我們經常需要編寫數據處理函數,數據 model 輸出轉換為可接受的小胡子模板輸入。

例如,@Liang 的應用程序輸出一個JSON數組,如下所示:

"prop":{"brands":["nike","adidas","puma"]}

但他的模板希望它采用以下形式:

"brands":[{"name":"nike"},{"name":"adidas"},{"name":"puma"}]

所以他需要通過以下方式對其進行轉換:

var data = {brands: obj.prop['brands'].map(function(x){ return {name: x}; })};

Liang 還可以調整他的模板,使其在沒有數據轉換步驟的情況下工作。 但是如果我事先不知道模板是什么並且我唯一的模板保證是它的標簽解析為我的數據 model 中的鍵怎么辦。是否可以編寫一個 function bridge(data_model, template)作為輸入數據model 和小胡子模板並輸出轉換 function Transform 這樣Transform本身就是將數據 model 輸出按摩到可接受的胡子模板輸入中的代碼。

換句話說,如果

data_model = "prop":{"brands":["nike","adidas","puma"]}

template = {{#brands}} <b>{{name}}</b> {{/brands}}

那么什么bridge產生 javascript

{brands: obj.prop['brands'].map(function(x){ return {name: x}; })} = bridge(data_model, template)

bridge的 output 將是 javascript 代碼)。

我知道這可能太無拘無束,無法給出一個好的答案,但我認為每個人都可以認識到,至少, bridge需要能夠 output 嵌套for loopsmap命令。 我怎么能 go 制作一個粗略的bridge版本,它在與小胡子標簽相對應的正確位置有for loop命令?.. 抱歉,如果這沒有多大意義,這對我來說是一個具有挑戰性的問題。 老實說,這感覺有點像求魔法。

它不在 javascript 中,但 R3M(用 php 編寫)也可以模板 json 文件。 它的語法是從 Smarty 借來的,但有所不同。 它將在 2023 年達到生產穩定性。它啟用可在 .js、.json &.tpl 中使用的模板。

{
  "books": "{json.select($url, 'book')}"
}

參見https://github.com/like-it/r3m-framework

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM