jqgrid afterShowForm не вызывается - PullRequest
4 голосов
/ 21 июля 2011

Я хотел бы расположить форму просмотра jqgrid в центре экрана. Поскольку высота устанавливается автоматически (в зависимости от объема данных), мне нужно вычислить его центральное положение после того, как оно будет визуализировано. Следовательно, я хотел бы использовать afterShowForm. К сожалению, это не называется вообще. Я пробовал старые версии jqGrid (возможно, самая новая содержит ошибку), но это не решило мою проблему. Кто-нибудь понял, почему он не стреляет? Обратите внимание, что когда я изменяю afterShowForm на beforeShowForm, он срабатывает. Но тогда высота еще не рассчитана. Спасибо! (конечно, вы можете предложить другой способ достижения моей цели!). Код:

        $("#grid").jqGrid("navGrid", "#pager",
        { view: true, addfunc: additem, editfunc: edititem, delfunc: deleteitem },
        {},
        {},
        {},
        {},
        { width: 350,
            afterShowForm: function (formid) {
                alert('yey');
                // Here I want to center the form
            }
        }
        );

Редактировать: В вики я обнаружил, что в форме просмотра нет события afterShowForm; он имеет только onClose и beforeShowForm :( так что я думаю, что невозможно установить позицию центра таким образом.

Ответы [ 2 ]

2 голосов
/ 22 июля 2011

Причина проблемы очень проста: afterShowForm - это на самом деле не существует в форме просмотра.Поддерживаются только события дерева: onClose, beforeShowForm и beforeInitData .Поэтому вы должны использовать beforeShowForm, но делать то, что вам нужно внутри другого потока:

beforeShowForm: function($form) {
    setTimeout(function() {
        // do here all what you need (like alert('yey');)
    },50);
}

В большинстве случаев вы можете использовать даже 0 (вместо 50) в качестве второго параметра setTimeout Функция JavaScript.

0 голосов
/ 22 июля 2011

Хорошо, я понял это таким образом.Я использую второй setTimeout (), потому что в противном случае вы получите «вспышку», когда окно переместится из старого положения в центр экрана.Спасибо!

var viewform = "#viewmodgrid";

        function centerViewForm() {
            $(viewform).css('visibility', 'hidden');
            setTimeout(function () {
                $(viewform).css('left', ($(document).width() / 2) - ($(viewform).width() / 2));
                $(viewform).css('top', ($(document).height() / 2) - ($(viewform).height() / 2));
                $(viewform).css('visibility', 'visible');
            });
        }

...                 beforeShowForm: function (formid) {
                    centerViewForm();
                }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...