backbone.js with backgrid.js to populate JSON



我使用backgrid.js与backbone.js。我试图在backgrid填充JSON(用户列表)。下面是我的JSON,

<>之前[{"name": "kumnar", "emailId":"kumar@xxx.com","地点":{"名称":"ABC公司","省":"CA"}})之前

我可以访问name &emailId如下,

<>之前var User = Backbone.Model.extend({});var User = Backbone.Collection.extend({模型:用户,url: https://localhost: 8181/服务器/rest/用户',});var users = new User();Var columns = [{名称:"loginId",标签:"名称",细胞:"字符串"}, {名称:"emailId",标签:"电邮编号";细胞:"字符串"}];var grid = new Backgrid。网格({列:列,收藏:用户});$ (" # grid-result").append (grid.render()。美元el);userEntities.fetch ();之前

我的问题是,我如何添加一个列显示位置。name?

我在列的name属性中指定了locations.name,但它不起作用。{名称:"locations.name",标签:"电邮编号";细胞:"字符串"}

谢谢

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

此外,您可以尝试backbone-deep-model,因为它似乎支持您正在寻找的路径语法。我以前没有尝试过,但如果它工作,你可以创建两个字符串列分别称为location.namelocation.province

扩展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)。我就是这么做的,效果很好。更好的方法是覆盖Cell定义,在name值中查找"。",并将其视为深度模型。

请注意,这仅仅是因为我使用了从"get"调用返回Model实例的骨干关系。

相关内容

  • 没有找到相关文章

最新更新