2015-03-16 8 views
0

Я только начал использовать dgrid, и, пройдя образец dTunes, я не смог найти идентификатор, связанный с каждой строкой в ​​списке. Это очень исправно с моей стороны, но как я могу получить идентификатор, который я отправил из источника данных?Получение id из строки, нажатой на dgrid Список

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 created?).

+0

Что вы подразумеваете под реальным идентификатором? можете ли вы предоставить более подробную информацию? 'Row.data' возвращает фактические данные, которые хранятся в массиве объектов, которые могут или не могут соответствовать данным, отображаемым в сетке. Трудно понять, чего вы пытаетесь достичь. – frank

+0

Поле 'id' будет находиться в объекте' data'. i.e 'console.log (row.data.id)', а не 'row.id'. 'Row.id' является внутренним представлением dGrid. – frank

+0

Возможно, что-то не так, потому что row.data.id не определено, поскольку row.data - это просто текст. Является ли мой объект строки определенным? – Dave

ответ

1

Вы на самом деле не показали полный пример, но, учитывая, что вы все равно используете хранилище, вам будет намного легче, если вы дадите dgrid управление запросом на хранилище для вас. Если вы используете dgrid/OnDemandList (или dgrid/List плюс dgrid/extensions/Pagination), вы можете передать свой dataCSTS магазин к collection собственности, он будет оказывать все это для вас, и это будет правильно подобрать свои идентификаторы (так Memory и RequestMemory расширением, по умолчанию для использования id как их идентификационное свойство).

Самое подходящее место для того, чтобы сделать то, что вы сейчас делаете до renderArray, вероятно, будет в методе renderRow, если вы просто используете List, а не Grid. (Значение по умолчанию в списке просто возвращает div с текстовым узлом, содержащим все, что передается ему, вы будете передавать объект, поэтому сначала захотите выкапывать любое свойство, которое вы на самом деле хотите отобразить.)

Если вы хотите строку заголовка, рассмотрите установку showHeader: true и реализацию renderHeader. (Это значение false в списке по умолчанию, но сетка устанавливает его значение true и реализует его.)

Возможно, вы захотите проверить Grids and Stores tutorial.

+0

Я новичок в dGrid (и dojo), поэтому спасибо за ваше терпение и прояснение. Я рассмотрю использование OnDemandList. Мне действительно нужна одна колонка, поэтому список кажется подходящим. – Dave

+0

На самом деле я не нашел мало информации о OnDemandList, поэтому я просто сменил эти списки на обычные гриды, и теперь все просто. – Dave

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); 
}); 

я не уверен, будет ли это работать, если я когда-нибудь попробовать сделать сортировку.

 Смежные вопросы

  • Нет связанных вопросов^_^