Slickgrid меняет идентификатор из моих данных и не очищает пустую строку - PullRequest
0 голосов
/ 28 мая 2019

Я пытаюсь обновить свою сетку без необходимости обновления!Прямо сейчас он обновляет только сетку, но не знает почему, он меняет идентификатор на последний вставленный и не «очищает» пустую строку!Когда я пытаюсь вставить данные, он очищается.Я вроде как с Ajax и Slickgrid!Я пытался увидеть пример ajax из slickgrid, но у меня есть некоторые ошибки!Нужно ли заново загружать onCellChange и так далее?Я просто хотел обновить сетку новыми данными.Любая помощь?

Заранее спасибо

Итак, я попытался перерисовать таблицу, используя мой реальный код рисования, но я не смог перерисовать с правильными данными.

Функция перерисовки сетки

function desenhaGrid() {
    $("#myGrid").ready(function () {
        $(function () {
            $.ajax({
                type: "GET",
                url: '/SlickGrid/GetData',
                dataType: 'json',
                success: function (jsonResult) {
                    for (var key in jsonResult) {
                        if (jsonResult.hasOwnProperty(key)) {
                            //print table
                            var d = (data[key] = {});
                            for (var i = 0; i < data.length; i++) {
                                d["#"] = i + 1;
                            }
                            d["id"] = jsonResult[key].id;
                            d["t_nome"] = jsonResult[key].t_nome;
                            d["t_prof"] = jsonResult[key].t_prof;
                            d["t_data"] = jsonResult[key].t_data;
                            d["t_morada"] = jsonResult[key].t_morada;
                            d["t_percCompleto"] = jsonResult[key].t_percCompleto;
                        }
                    }


                    grid = new Slick.Grid("#myGrid", dataView, columns, options);

                   dataView.beginUpdate();
                   grid.invalidateAllRows();
                   dataView.setItems(data);
                   grid.render();
                   dataView.endUpdate();
                                       }
            });

        });
    });
}

, и это мой onAddNewRow

        grid.onAddNewRow.subscribe(function (e, args) {
            var idData = jsonResult[key].id + 1;
            var item = { "id": idData, "t_nome": '', "t_prof": '', "t_data": '', "t_morada": '', "t_percCompleto": '' };
            $.extend(item, args.item);
            dataView.addItem(item);
            //if user press enter
            grid.onKeyDown.subscribe(function (e) {
                var keyPressed = event.keyCode || event.which;
                if (keyPressed == 13) {
                    alert("add");
                    var myJSON = JSON.stringify(item);
                    $.post("/SlickGrid/addGridEnter", $("input[name=mydata]").val(myJSON));
                    console.log(myJSON);
                    desenhaGrid();
                }
            });

        });

Я ожидал, что он перерисовает мою сетку со всеми данными.Вместо этого меняются все идентификаторы на последний вставленный, и когда я пытаюсь вставить данные в последнюю строку, не позволю мне (это очищает его после того, как я покину ячейку).

ОБНОВЛЕНИЕ:

Я обновил функцию рисования сетки

function desenhaGrid() {
    $("#myGrid").load(function () {
        $(function () {
            $.ajax({
                type: "GET",
                url: '/SlickGrid/GetData',
                dataType: 'json',
                success: function (jsonResult) {
                    dataView.beginUpdate();
                    grid.invalidateAllRows();
                    dataView.setItems(jsonResult);
                    dataView.endUpdate();
                    grid.render();
                }
            });

        });
    });
}

1 Ответ

1 голос
/ 29 мая 2019

Я не думаю, что это проблема SlickGrid.Есть все виды проблем с JavaScript.Например:

  • почему вы используете $("#myGrid").ready(?Событие ready возникает только тогда, когда DOM завершил загрузку

  • , и вся операция копирования с jsonResult до data просто заканчивается теми же данными.почему бы не использовать jsonResult напрямую?

  • секция for (var i = 0; i < data.length; i++) { d["#"] = i + 1; } выполняется один раз для каждой строки, добавленной к data, она должна выполняться только один раз в конце, вне цикла

  • вы подписываетесь на событие keydown один раз для каждой строки, добавленной в сетку.Вы должны просто подписаться один раз.прослушивание клавиши ввода также является очень плохим методом определения, была ли введена строка.Что делать, если кто-то нажимает на другую строку перед нажатием Enter?

Slickgrid - это сетка на стороне клиента.Это означает, что данные не нужно сохранять после каждого изменения.Обычный подход - использовать кнопку «Сохранить» или определить, изменилась ли активная строка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...