作成中のプラグインにマイクロ テンプレートを取り込もうとしています。私はすべてうまくいっていますが、データ内のネストされた配列に関しては問題があります。よろしくお願いいたします。削除されたコードは次のとおりです。
var locations = [{
"name": "Disneyland California",
"address": "1313 North Harbor Boulevard"
},
{
"name": "Walt Disney World Resort",
"address": "1503 Live Oak Ln"
}],
tmplData = [{
location: locations[0],
foo: "bar"
}],
template = "Shipping From:<br><b>{{location.name}}, {{foo}}",
attachTemplateToData;
attachTemplateToData = function(template, data) {
var i = 0,
len = data.length,
fragment = '';
function replace(obj) {
var t, key, reg;
for (key in obj) {
reg = new RegExp('{{' + key + '}}', 'ig');
t = (t || template).replace(reg, obj[key]);
}
return t;
}
for (; i < data.length; i++) {
fragment += replace(data[i]);
}
console.log(fragment);
};
attachTemplateToData(template, tmplData);
ログ:
bar,{{location.name}}
console.log でわかるように、「foo」は問題なく出力されますが、「location.name」(「ディズニーランド カリフォルニア」) もレンダリングする必要があります。ネストされたループになることはわかっていますが、一生構文を理解することはできません。ところで、テンプレート ソリューションはここから来ました: http://net.tutsplus.com/tutorials/javascript-ajax/create-a-makeshift-javascript-templating-solution/ ありがとう!
編集::: ロケーション オブジェクトの任意のプロパティをテンプレートに配置できるようにすることを検討しています。たとえば、ユーザーが location.city または locations.foo を配列に追加することを決定した場合、テンプレートでは {{location.city}} または {{location.foo}} に移動するだけです。jQuery の tmpl プラグインを使用してこれを達成できましたが、それが提供するすべてのものは必要ありません。上記のインスタンスのみを処理するために、私が持っているような非常にストリップされたバージョンが欲しいです。これが私がtmplプラグインで行ったことです(動作します):
tmplData = [{
locations: settings.locations[i]
}];
var tmplMarkup = "Shipping From:<br><b>${locations.name}, ${locations.city}, ${locations.state}</b>";
$.template("deTemplate", tmplMarkup);
$.tmpl("deTemplate", tmplData).appendTo("#deResults");