我使用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.name
和location.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实例的骨干关系。