我有一个简单的网格,显示id,name和city是一个多选(行)。我发现这很令人难以置信,dataItem
永远不会返回id字段的名称和城市。对我来说,这似乎是一个错误。网格显示所有字段。如何从数据项中获取id?
opts.change = function(e) {
var selectedRows = ctrl.grid.select();
var selectedDataItems = [];
for (var i = 0; i < selectedRows.length; i++) {
var dataItem = ctrl.grid.dataItem(selectedRows[i]);
console.log(dataItem); // never has id on it
selectedDataItems.push(dataItem);
}
完整配置字符串减去传输(opts)&amp;改变(上图):
{
"dataSource": {
"pageSize": 20,
"serverPaging": true,
"serverFiltering": true,
"serverSorting": true,
"serverGrouping": false,
"schema": {
"total": "total",
"data": "results",
"model": {
"id": "id"
}
}
},
"height": 300,
"width": "100%",
"filterable": {
"extra": false
},
"groupable": false,
"sortable": true,
"pageable": true,
"columns": [
{
"field": "id",
"title": "ID",
"hidden": false
},
{
"field": "name",
"hyperlink": "/abc/{id}",
"icon": "bath"
},
{
"field": "city"
}
],
"selectable": "multiple,row"
}
这是选择测试。 https://db.tt/yDLD44UNjN我正在将数据项输出到文本框,并且它应该是id
。
奇怪的是,如果我输出所有列(不指定它们),id将会通过。
答案 0 :(得分:0)
取决于您如何定义网格。如果明确定义网格: 然后,您应该定义模型,使其看起来像这样:
.DataSource(dataSource => dataSource
.Ajax()
.Model(model => model.Id(p => p.Id))
答案 1 :(得分:0)
如果您使用的是JavaScript API,那么您应该尝试明确定义数据模型,使其看起来像这样:
dbo
答案 2 :(得分:0)
我要发布我的解决方案,但我真的想要一个更好的解决方案,所以我不会接受我的。似乎与数据源为id
的列存在某种冲突。除了改变我不会做的数据库之外,我唯一能让它工作的方法是:
在网格的数据回调中添加一个名为_id
的新属性,并将其设置为id
。
data: function(response) {
for(var i=0;i<response.results.length;i++) {
if (response.results[i].id) {
response.results[i]._id= response.results[i].id;
}
}
return response.results;
}
然后在更改事件中,将id
设置为_id
。这真的是hacky而不是我首选的解决方案,但这是唯一可行的方法。
opts.change = function(e) {
var selectedRows = ctrl.grid.select();
var selectedDataItems = [];
for (var i = 0; i < selectedRows.length; i++) {
var dataItem = ctrl.grid.dataItem(selectedRows[i]);
dataItem.id= dataItem._id;
selectedDataItems.push(dataItem);
}
ctrl.events.change(selectedDataItems);
}
我尝试了模型,id等的所有组合,但似乎都没有。