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"},
    ]});
Другие вопросы по тегам