1

Jade を使用して SQL クエリの結果をレンダリングしようとしています。バナーを含むテーブルをクエリします。各バナーにはタイプ (合計 3 つ) と一意の ID があります。

これは私が持っているものです:

特急 :

connection.query("SELECT * FROM banner_idx ORDER BY id_type ASC, id_banner ASC", function selectCb(err, results, fields) {
        if (err) {throw err;}
        res.render('banners', {
            title: results[0].title,
            results: results
        });
    });

ジェイド:

ul.listBanners
    - each result in results
        li.banner(data-type=result['id_type'])
        - var item = result['id_banner']+': '+result['name_banner']
        span=item

これにより、必要な順序でバナーのリストが表示されます。今、私はそれをそのように整理したいと思います(疑似コード):

ul#id_type1
    list of banners with id_type == 1
ul#id_type2
    list of banners with id_type == 2
ul#id_type3
    list of banners with id_type == 3

ジェイドでそれは可能ですか?Express から 1 つではなく 3 つの結果セットを送信する必要がありますか? 問題は、新しい id_type にはハードコーディングが必要になることです...何かアイデアはありますか?

4

1 に答える 1

0

を使用lodash.groupByして、結果セットをid_type次のようにグループ化できます。

var _ = require('lodash');

...
connection.query("SELECT * FROM banner_idx ORDER BY id_type ASC, id_banner ASC", function selectCb(err, results, fields) {
  if (err) {throw err;}
  res.render('banners', {
      title   : results[0].title,
      groups  : _.groupBy(results, 'id_type')
  });
});

groupBy次のようなオブジェクトを返します。

{
  '1' : [
    { id_type : 1, ... },
    { id_type : 1, ... },
    ...
  ],
  '2' : [
    { id_type : 2, ... },
    { id_type : 2, ... },
    ...
  ],
  ...
}

したがって、id_typeこの場合、そのオブジェクトのキーは、グループ化しているプロパティの値です。

テンプレートは次のようになります。

each entries, id in groups
  ul(id = 'id_type' + id)
    each entry in entries
      li #{ entry.id_banner + ': ' + entry.name_banner }
于 2013-11-05T20:37:14.583 に答える