从行中获取id单击dgrid列表

时间:2015-03-16 15:00:25

标签: dojo dgrid

我刚开始使用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创建?)。

2 个答案:

答案 0 :(得分:1)

您还没有真正展示完整的示例,但鉴于您仍在使用商店,如果您让dgrid管理您的商店查询商店,那么您将拥有更轻松的时间。如果您使用dgrid/OnDemandList(或dgrid/Listdgrid/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);
});

如果我尝试排序,我不确定这是否有效。