これは私がMustache.jsでやりたいことですが、ドキュメントでその方法がわかりません。
var view = {items:['Mercury','Venus','Earth','Mars']};
var template = "<ul> {{#items}}<li>{{i}} - {{.}}</li>{{/items}} </ul>";
var html = Mustache.to_html(template,view);
必要な出力:
<ul>
<li>0 - Mercury</li>
<li>1 - Venus</li>
<li>2 - Earth</li>
<li>3 - Mars</li>
</ul>
口ひげを生やしている代わりに、<ol></ol>
の代わりに<ul></ul>
を使用することもできます。これにより、各アイテムの前にindex+1
が付けられます。
必要に応じて、cssを使用して開始番号を0に変更すると、希望どおりにレンダリングされます。番号の後のdot
を、" - "
などに変更することもできます。 、問題は解決しました。
<ol>
<li>Mercury</li>
<li>Venus</li>
<li>Earth</li>
<li>Mars</li>
</ol>
上記は次のようにレンダリングされます:
1. Mercury
2. Venus
3. Earth
4. Mars
口ひげでそれを行いたい場合の適切な方法は、文字列の配列を、インデックスと文字列値が存在するオブジェクトの配列に変換することです。
// I wrote this from the back of my head, it's untested and not guaranteed
// to work without modifications, though the theory behind it is valid.
var array = ["123","stackoverflow","abc"];
var obj_array = [];
for (idx in array)
obj_array.Push ({'index': idx, 'str': array[idx]});
var view = {items: obj_array};
var template = "<ul>{{#items}}<li>{{index}} - {{str}}</li>{{/items}}</ul>";
var html = Mustache.to_html(template,view);
高速でクリーンなソリューションをお探しですか?
index
関数を追加するだけです_var data = {
items: [{
name: Aliasghar
, grade: 19
}, {
name: Afagh
, grade: 20
}]
, index: function() {
return ++window['INDEX']||(window['INDEX']=0);
}
}
_
テンプレートは次のようになります。
_{{#items}}
{{index}} -- {{name}} is {{grade}}
{{/items}}
_
データにindex: function(){}
を追加し、それをテンプレートの通常の関数として使用します。この関数は、グローバルに使用可能なwindow
オブジェクトにキーを追加します。その後、1つずつ増やしていきます。
複数のテンプレートを次々に使用している場合は、_window['INDEX']
_をリセットするか、キーを_window['YEKI_DIGE']
_などの他のキーに変更する必要があることに注意してください。これを行う別の方法は、resetIndex
関数を追加することです。方法は次のとおりです。
_var data = {
items: [{
name: Aliasghar
, grade: 19
}, {
name: Afagh
, grade: 20
}]
, index: function() {
return ++window['INDEX']||(window['INDEX']=0);
}
, resetIndex: function() {
window['INDEX']=null;
return;
}
}
_
テンプレートは次のようになります。
_{{#items}}
{{index}} -- {{name}} is {{grade}}
{{/items}}
{{resetIndex}}
_
この回答に触発されました: https://stackoverflow.com/a/10208239/257479 from dave on Mustacheで、現在のインデックスを取得する方法セクション
Handlebars.jsを使用できる場合は、この要点に記載されている部分を使用できます: https://Gist.github.com/1048968
アイテムごとに複数回インデックスにアクセスしたい場合は、次のようなものをお勧めします。
var data = {
items: [{
name: Aliasghar
, grade: 19
}, {
name: Afagh
, grade: 20
}]
, setUpIndex: function() {
++window['INDEX']||(window['INDEX']=0);
return;
}
, getIndex: function() {
return window['INDEX'];
}
, resetIndex: function() {
window['INDEX']=null;
return;
}
}
restIndex
関数を使用してください。setUpIndex
関数を使用して、そのアイテムのインデックスを設定します。getIndex
アイテムを使用してインデックスにアクセスします。例として、これを考えてみましょう。
{{resetIndex}}
{{#items}}
{{setUpIndex}}
{{getIndex}}. {{name}} is at index {{getIndex}}
{{/items}}
間違った値を取得せずに、アイテムごとに複数回インデックスにアクセスする方法に注目してください。
(ノード4.4.7、口ひげ2.2.1でテスト済み。)
グローバル変数やオブジェクト自体の変更を伴わない、すっきりとした機能的な方法が必要な場合は、この関数を使用してください。
var withIds = function(list, propertyName, firstIndex) {
firstIndex |= 0;
return list.map( (item, idx) => {
var augmented = Object.create(item);
augmented[propertyName] = idx + firstIndex;
return augmented;
})
};
ビューを組み立てるときに使用します。
var view = {
peopleWithIds: withIds(people, 'id', 1) // add 'id' property to all people, starting at index 1
};
このアプローチの優れた点は、古いセットをプロトタイプとして使用して、「viewmodel」オブジェクトの新しいセットを作成することです。 person.id
を読むのと同じように、person.firstName
を読むことができます。ただし、この関数はpeopleオブジェクトをまったく変更しないため、他のコード(IDプロパティが存在しないことに依存している可能性があります)は影響を受けません。
Handlebars.jsを使用してから、
Handlebars.registerHelper("inc", function (value, options) {
return parseInt(value) + 1;
});
HTMLで使用するには
{{inc @@index}}