1

backbone.js で backgrid.js を使用しています。バックグリッドに JSON (ユーザー リスト) を入力しようとしています。以下は私のJSONです、

    [{"name": "kumnar", "emailId":"kumar@xxx.com",
    "locations":{"name":"ABC Inc.,", "都道府県":"CA"}
    }]

以下のように name & emailId にアクセスできます。

    var User = Backbone.Model.extend({});
    var User = Backbone.Collection.extend({
        モデル: ユーザー、
        URL: 'https://localhost:8181/server/rest/user',
    });

    var ユーザー = 新しいユーザー ();
    var 列 = [{
            名前:「ログインID」、
            ラベル: "名前",
            セル: "文字列"
        }、{
            名前: "emailId",
            label: "メールID",
            セル: "文字列"
        }
    ];

    var grid = new Backgrid.Grid({
        列: 列、
        コレクション: ユーザー
    });

    $("#grid-result").append(grid.render().$el);
    userEntities.fetch();

私の質問は、locations.name を表示するための列を追加するにはどうすればよいですか?

列の name プロパティに locations.name を指定しましたが、機能しません。{ name: "locations.name", label: "E-mail Id", cell: "string" }

ありがとう

4

2 に答える 2

3

Cell (または StringCell などの既存の拡張機能) を拡張するのは非常に簡単です。ここから始めましょう:

var DeepstringCell = Backgrid.DeepstringCell = StringCell.extend({

    render: function () {
        this.$el.empty();
        var modelDepth = this.column.get("name").split(".");
        var lastValue = this.model;
        for (var i = 0;i<modelDepth.length;i++) {
            lastValue = lastValue.get(modelDepth[i]);
        }
        this.$el.text(this.formatter.fromRaw(lastValue));
        this.delegateEvents();
        return this;
    },

});

この例では、列の "cell" 属性に "string" の代わりに "deepstring" を使用します。組み込みのフォーマッターを深いモデル サポートと共に再利用する場合は、さらに拡張して別のフォーマッター (EmailFormatter など) を使用します。それが私がやったことであり、うまく機能しています。さらに良いのは、Cell 定義をオーバーライドして "." を探すことです。name 値に追加し、深いモデルとして扱います。

「get」呼び出しからモデルインスタンスを返すバックボーンリレーショナルを使用しているため、これは機能します。

于 2013-05-27T17:22:43.567 に答える