0

このドキュメント (モデル) のグリッドを表示したい:

{
    id: "53f7ba4b30d2317912fc8004",
    title: "Hellow world",
    on_slideshow: false,
    country: {
        name: "United state",
        country_code: "US"
    }
    tags: [
        {
            name: "backbonejs"
            object_id: "72691"
        },
        {
            name: "backgrid"
            object_id: "72692"
        }
    ]
}

私のjsファイルで..

var grid = new Backgrid.Grid({
    columns: [{
        name: "title",
        label: "Title",
        cell: "string"
    },
    {
        name: "country",
        label: "Country",
        cell: "string"
    },
    {
        name: "on_slideshow",
        label: "Slide",
        cell: "boolean"
    },
    {
        name: "tags",
        label: "Tags",
        cell: "string"
    },
    {
        name: "pub_date",
        label: "Publiched",
        cell: "string"
    }],
  collection: articles
}).render();

タグは [object Object]、[object Object] として表示され、国はまったく表示されませんでした。

タグの名前と国のリストを正しく表示するにはどうすればよいですか?

4

1 に答える 1

0

Backgrid は、データが 1 レベルの深さの s のテーブルを作成するように設計されていますCollectionが、データは 2 レベルの深さです。カスタム フォーマッタを使用することも、 のメソッドをオーバーライドすることもできますが、おそらく最も簡単な解決策は、Backgrid が消化しやすいようにモデルを少し「平坦化」することです。ModelModelrenderColumnCell

例えば:

var Article = Backbone.Model.extend({
    flatten: function() {
        var flatVersion = this.toJSON();
        flatVersion.country = this.get('country').name;
        flatVersion.tags = this.get('tags').join(', ');
        return new Backbone.Model(flatVersion);
    }
});

次に、同様の flatten メソッドを に追加しますCollection

var Articles = Backbone.Collection.extend({
    flatten: function() {
        return this.invoke('flatten');
    }
});

最後にフラット化されたバージョンを Backgrid に渡します。

var grid = new Backgrid.Grid({
    ...
    collection: articles.flatten()
});

それが役立つことを願っています。

于 2014-10-06T22:49:17.023 に答える