1

我正在使用带有backgrid.js 的backgrid.js。我正在尝试在 backgrid 中填充 JSON(用户列表)。下面是我的JSON,

    [{“名称”:“kumnar”,“emailId”:“kumar@xxx.com”,
    “位置”:{“名称”:“ABC Inc.”,“省”:“CA”}
    }]

我可以如下访问姓名和电子邮件ID,

    var User = Backbone.Model.extend({});
    var User = Backbone.Collection.extend({
        型号:用户,
        url: 'https://localhost:8181/server/rest/user',
    });

    var users = new User();
    变量列 = [{
            名称:“登录ID”,
            标签:“名称”,
            单元格:“字符串”
        }, {
            名称:“电子邮件ID”,
            标签:“电子邮件ID”,
            单元格:“字符串”
        }
    ];

    var grid = new Backgrid.Grid({
        列:列,
        收藏:用户
    });

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

我的问题是,如何添加用于显示位置名称的列?

我在列的 name 属性中指定了 locations.name 但它不起作用。{ 名称:“locations.name”,标签:“电子邮件 ID”,单元格:“字符串”}

谢谢

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;
    },

});

在此示例中,您将使用“deepstring”而不是“string”作为列的“cell”属性。如果您想重用内置格式化程序以及深度模型支持,请进一步扩展它以使用不同的格式化程序(如 EmailFormatter)。这就是我所做的,而且效果很好。更好的是覆盖单元定义以查找“。” 在名称值中并将其视为深度模型。

请注意,这仅适用于我使用骨干关系,它从“get”调用返回模型实例。

于 2013-05-27T17:22:43.567 回答
3

目前,backgrid 和 backgrid 都不提供对嵌套模型属性的任何支持,尽管有许多票正在进行中。要正确显示位置信息,您可以将位置对象转换为服务器上的字符串并在 backgrid 中使用字符串单元格,或者您可以尝试为位置列提供自己的单元格实现

此外,您可以尝试使用骨干深度模型,因为它似乎支持您正在寻找的路径语法。我以前没有尝试过,但如果它有效,您可以分别创建 2 个字符串列,分别称为location.namelocation.province

于 2013-04-28T04:31:55.010 回答