Dojo dgrid обновляет строку

У меня есть dgrid, который заполняется из додзё/запроса:

var TrackableMem = declare([Memory, Trackable]);
var store = new TrackableMem({
    data : resp.results
});

Эта сетка имеет несколько столбцов, которые являются текстовыми полями. Когда они изменены, я хотел бы подтвердить, что пользователь действительно хочет их редактировать:

grid.on("dgrid-datachange", function(evt) {
    if(!confirm("change this field?")) {
         // revert cell value back to the old one.
         grid.get("collection").get(evt.cell.row.id).notes = evt.oldValue;
         grid.refresh();
    } else {
        // do ajax call here.....
    }
}

Это не работает, новое обновленное значение остается там, но когда я запускаю то же самое в консоли разработчика, оно работает:

grid.get("collection").get(0).notes = "testing";
grid.refresh();

Есть идеи? evt.cell.row.id и evt.oldValue являются правильными значениями.


person jongusmoe    schedule 26.09.2016    source источник


Ответы (1)


Нет необходимости вручную возвращать данные в обработчике dgrid-datachange, поскольку значения еще не сохранены.

Это сделано специально, чтобы можно было отменить обновление. В вашем случае вы можете сделать:

grid.on("dgrid-datachange", function(evt) { if(!confirm("change this field?")) { evt.preventDefault(); } else { // do ajax call here..... } }

Подробнее об этом можно прочитать в официальной документации и этот билет Github.

person Corina    schedule 26.09.2016
comment
Ты спасатель. Спасибо! - person jongusmoe; 26.09.2016
comment
Рад, что смог помочь! - person Corina; 26.09.2016