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);
});
}
Любая помощь приветствуется
Спасибо
1 ответ
Чтобы событие click связывалось со строкой, для строки требуется уникальный идентификатор. Если ваши данные не возвращаются с идентификатором для каждой строки, тогда событие щелчка не будет знать, как различать строки, и вернет самую последнюю запись, которая в этом случае является последней записью в вашей таблице.
Добавьте свойство 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"},
]});