オブジェクトのキーと値のペアを反復処理することは可能ですか?
この例を考えてみましょう。
var values = {
'single': 'Single bed',
'double': 'Double bed',
'twin': 'Twin beds'
};
同等のhandlebar.jsコード:
<select name="bed_type">
{{#values}}
<option value="{{@key}}">{{this}}</option>
{{/values}}
</select>
mustache.jsでそれを行う方法が見つかりませんでした
ありがとう。
こんにちは@chlab!
データをレンダラーに直接渡す代わりに、データをview
オブジェクトにフォーマットする必要があります。 または、カスタムヘルパーを使用します。 これらのstackoverflowスレッドにはいくつかのアイデアがあります。
http://stackoverflow.com/questions/9058774/handlebars-mustache-is-there-a-built-in-way-to-loop-through-the-properties-of
http://stackoverflow.com/questions/9981907/how-to-iterate-over-a-hash-in-mustache-js
それでも不明な場合はお知らせください。 乾杯!
@dasilvacontinに感謝します。
それを行うにはかなり厄介な方法のようですよね? この背後にある理由は何ですか? ハンドルバーの方法はもっと簡単ではないでしょうか?
乾杯
@chlabこれはMustacheの基本原則です。 すべてのロジックは、テンプレートと同じではないビューに抽出する必要があります。 この場合、それはほんの少しの論理であるため、より厄介に見えますが、それは滑りやすい坂道であり、Mustacheはあなたを降りることさえできません:)
けっこうだ。 説明してくれてありがとう!
最初に言及された基本原則は、口ひげをあまりにも意見的にします、私は口ひげを幸せにするために別の変換フェーズを常に手配したいとは限りません...
単純なオブジェクトでの反復を許可することで、実際に口ひげビューにロジックが導入されますか? 私の議論はノーだろう。 私はロジックレスの原則のファンですが、すでに配列を繰り返すことができます。これは不必要に厄介であるというOPに同意します。 次の例を考えてみましょう。
データを次のようにしたいと思います。
"attr": {
"class": "foo",
"href": "/somewhere"
}
しかし、それは次のようにする必要があります。
"attr": [
{
"key": "class",
"value": "foo"
},
{
"key": "href",
"value": "/somewhere"
}
]
レンダリングするには:
<a{{#attr}} {{ key }}="{{ value }}"{{/attr}}></a>
こんにちは、みんな、
匿名リストを繰り返すにはどうすればよいですか? {{#。}}と{{/。}}を使用してみましたが、機能しません。
ありがとう
匿名リストを繰り返すには
let facts = doc.data();
res.render('index', {facts});
<ul>
{{#each facts}}
<li>Key: {{@key}} Value = {{this}}</li>
{{/each}}
</ul>
この号には公式なものがありますか?
キーと値のペアを持つオブジェクトの匿名リストを実際に使用するにはどうすればよいですか?
提案されたオブジェクトvar values = { 'single': 'Single bed', ...}
と質問の提案された出力を使用して実際の例を示してください。
PS: @ prashantcs8あなたの例は本当ですか? 動作していません。
@chlab私たちは2018年にいます... Mustacheには匿名参照を使用するオプションはありませんか?
@baseten 、上記の「しかし、それはそうでなければならない」について、それは問題であり、データ構造変換を強制するのは醜いです...
これは洗練されたソリューションでres.render('index', objs2list(obj))
ありませんが、変換を行うためのMustacheヘルパーメソッドが存在する可能性がある場所で
function objs2list(p) {
r = [];
for (var key in p) if (p.hasOwnProperty(key)) {
r.push({"@key":key,"@val":p[key]});
}
return r;
}
存在?
最も参考になるコメント
単純なオブジェクトでの反復を許可することで、実際に口ひげビューにロジックが導入されますか? 私の議論はノーだろう。 私はロジックレスの原則のファンですが、すでに配列を繰り返すことができます。これは不必要に厄介であるというOPに同意します。 次の例を考えてみましょう。
データを次のようにしたいと思います。
しかし、それは次のようにする必要があります。
レンダリングするには: