doT javascript テンプレート エンジンを調査しましたが、データの形式が異なります。テンプレートに移動する前に各行を処理する組み込みの方法はありますか? もちろん、データ配列全体を事前に複製して変更するよりも、レンダリングする前に個々の行オブジェクトをその場で構築したいと思います。コードを掘り下げて自分でフォークすることもできましたが、標準機能が欠けていないことを確認したかったのです。
doT について質問するのに適した場所はありますか?
編集:私がやろうとしていることをより完全に説明するために、これはデータがどのように見えるかです(JSONにシリアル化されたColdFusionクエリ):
{
"COLUMNS": ["fname", "lname"],
"DATA":
[
["John", "Smith"],
["Jean", "Summers"],
["Jane", "Sturgess"]
]
}
したがって、厄介な答えは次のとおりです。
{{~it.DATA :v:i}}
<div>{{=v[it.COLUMNS.indexOf('fname')]}} {{=v[it.COLUMNS.indexOf('lname')]}} ({{=i}}</div>
{{~}}
列のインデックスをハードコーディングすることもできますが、テンプレートは読みにくくなります。
しかし、私は、テンプレートが冗長でなく、より直感的であることを望んでいます。これはその方向への一歩ですが、それでもファンキーです:
{{
var cols = {};
for(var i=0, n=it.COLUMNS.length; i<n; i++) {
cols[it.COLUMNS[i]] = i;
}
{ }}
{{ } }}
{{~it.DATA :v:i}}
<div>{{=v[cols.fname]}} {{=v[cols.lname]}} ({{=i}})</div>
{{~}}
もう 1 つのステップは手作業でコーディングされていますが、テンプレートの方がやや見栄えがします。
{{##def.fname:{{=v[0]}}#}}
{{##def.lname:{{=v[1]}}#}}
{{~it.DATA :v:i}}
<div>
{{#def.fname}} {{#def.lname}} ({{=i}})
</div>
{{~}}
これらのパーシャルを生成することはできますが、そのステップをテンプレート自体の一部にすることはできないと思います。
おそらくより良い解決策は、スニペットをスキップし、外部コードにデータから列定義を読み取らせ、テンプレートを読み取り、これらの '{{=colName}}' の colName を列定義で検索されたインデックスに置き換えてからコンパイルすることです。結果を実行します。
誰かがこれについてさらに考えを持っているなら、ぜひ聞いてみたい.