Щелчок строки dgrid onDemandGrid всегда получает последнюю строку в сетке

У меня есть собственный виджет с onDemandGrid. Я делаю вызов базы данных, и данные возвращаются в сетку в функции обратного вызова. В функции обратного вызова я настраиваю событие onclick строки, но проблема в том, что независимо от того, какую строку я щелкаю, я всегда получаю данные из последней строки. Кто-нибудь знает, как я могу исправить это, чтобы получить данные из строки, на которую нажали?

Вот функция postCreate, которая вызывает базу данных и устанавливает функцию обратного вызова:

...
postCreate: function () {
            MarkTicketDB.TicketUnMarkedGet(this.dataServiceUrl, 
lang.hitch(this, this.TicketUnMarkedSet)); //this works ok
}

Вот функция обратного вызова, которая устанавливает событие onclick:

TicketUnMarkedSet: function (GridData) {
...

 grid.on(".dgrid-row:click", function (evt) {
                var row = grid.row(evt);
                ID = row.data.ID; //this is always the last record in the grid
                alert(ID);

            });
}

Любая помощь приветствуется

Спасибо


person pvitt    schedule 09.10.2014    source источник


Ответы (1)


Для того чтобы событие щелчка могло связать себя со строкой, для строки требуется уникальный идентификатор. Если ваши данные не возвращаются с идентификатором для каждой строки, событие щелчка не будет знать, как различать строки, и вернет самую последнюю запись, которая в данном случае является последней записью в вашей таблице.

Добавьте свойство id к каждой записи в ваших данных, и это решит проблему.

Вот jsfiddle, который демонстрирует это: http://jsfiddle.net/kagant15/o8mq3ks1/

var storeWithID = new Memory({ data: [
        {"id" : 1, "Name": "John", "Artist": "Rock", "Album": "Roll", "Genre":"Alternative", "Year": "1995"}
    ]});

var storeWithNOid = new Memory({ data: [
    {"Name": "John", "Artist": "Rock", "Album": "Roll", "Genre":"Alternative", "Year": "1995"},
    ]});
person Thomas Kagan    schedule 09.10.2014
comment
Спасибо, я извлекаю эти данные из базы данных — у меня есть столбец с именем ID. Нужно ли мне изменить это на id при возврате из базы данных, или я могу каким-то образом указать свойство id равным ID на стороне javascript? - person pvitt; 09.10.2014
comment
Я смог установить idProperty следующим образом: gridStore = new Memory({data: GridData, idProperty:ID }); - person pvitt; 09.10.2014
comment
На самом деле вы можете указать идентифицирующее свойство хранилища памяти, равное ID вместо id. Пример... новая память ({данные: данные, idProperty: ID}); - person Thomas Kagan; 09.10.2014