我刚开始使用dgrid,并通过dTunes示例,我无法找到与列表中每一行相关联的ID。这对我来说非常有用,但是我如何获得从数据源发送的id?
define([
'require',
'dgrid/List',
'dgrid/OnDemandGrid',
'dgrid/Selection',
'dgrid/Keyboard',
'dgrid/extensions/ColumnHider',
'dojo/_base/declare',
'dojo/_base/array',
'dojo/Stateful',
'dojo/when',
'dstore/RequestMemory',
'put-selector/put',
'dojo/domReady!'
], function (require, List, Grid, Selection,
Keyboard, Hider, declare, arrayUtil, Stateful,
when, RequestMemory, put) {
var cstsNode = put(listNode, 'div#cstsCars');
...
var cstsList = new TunesList({}, cstsNode);
var dataCSTS = new RequestMemory({ target: require.toUrl('./dataCSTS.json') });
...
dataCSTS.fetch().then(function (cars) {
cstsCars = arrayUtil.map(cars, pickField('Description'));
cstsCars.unshift('All (' + cstsCars.length + ' CSTS Cars' + (cstsCars.length !== 1 ? 's' : '') + ')');
cstsList.renderArray(cstsCars);
});
...
cstsList.on('dgrid-select', function (event) {
var row = event.rows[0];
console.log(row.id); // shows row number. How do I get the real id or other fields?
console.log(row.data); // shows row text that is displayed ("sample text 1")
console.log(row.data.id); // undefined
});
以下是我提供的样本数据片段:
[{"id":"221","Description":"sample text 1"},
{"id":"222","Description":"sample text 2"},
{"id":"223","Description":"sample text 3"}]
我想看看身份证。相反,row.id返回1,2和3,即行号(或id dgrid创建?)。
答案 0 :(得分:1)
您还没有真正展示完整的示例,但鉴于您仍在使用商店,如果您让dgrid管理您的商店查询商店,那么您将拥有更轻松的时间。如果您使用dgrid/OnDemandList
(或dgrid/List
加dgrid/extensions/Pagination
),则可以将dataCSTS
商店传递到collection
媒体资源,它会为您呈现所有内容,并且它会正确地提取您的ID(自Memory
以来)和RequestMemory
扩展名,默认使用id
作为其身份属性。)
如果您只使用List而不是Grid,那么在renderArray
之前执行您当前正在执行的操作的最合适的位置可能是renderRow
方法。 (List中的默认值只返回一个带有文本节点的div,其中包含传递给它的任何内容;您将传递一个对象,因此您首先想要挖掘出您想要显示的任何属性。 )
如果您需要标题行,请考虑设置showHeader: true
并实施renderHeader
。 (默认情况下,这在List中为false,但Grid将其设置为true并实现它。)
您可能需要查看Grids and Stores tutorial。
答案 1 :(得分:0)
我认为问题可能是我根据dTunes示例代码对我的代码进行建模,该示例代码有3个列表,其行为与常规网格略有不同。
目前,我正在使用列表中提供的cachingStore。所以我得到id的方式:
cstsList.on('dgrid-select', function (event) {
var row = event.rows[0];
var id = storeCSTS.cachingStore.data[row.id - 1].id; // -1 because a header was added
console.log(id);
});
如果我尝试排序,我不确定这是否有效。