JQuery Модальный диалог - уничтожить или закрыть? - PullRequest
7 голосов
/ 15 апреля 2011

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

У меня есть функция: ClearDay (weekID, ltDayID) . В настоящее время это ответственно за создание диалога с двумя кнопками: ок и отмена.

ok сработает вызов ajax, передавая weekID и ltDayID на сервер.
cancel очистит диалог div и вызовет .dialog('destroy') на целевом div.

У меня вопрос: какой следующий подход я должен использовать?

Уничтожить / заново создать диалог при каждом вызове, чтобы я мог передавать параметры в вызов ajax и иметь только один div для всех диалогов в разметке

function ClearDay(weekID, ltDayID) {

    $('#modalDialog').dialog({
        autoOpen: true,
        width: 300,
        title: 'Confirm Delete',
        modal: true,
        buttons: [{
            text: 'ok',
            click: function (e) {

                $(this).dialog('close');

                $.ajax({
                    url: '/Shift/ClearDay',
                    type: 'POST',
                    cache: false,
                    data: { shiftWeekID: weekID, shiftLtDayID: ltDayID },
                    success: function (result) {

                        LoadShiftPattern(function (result) {

                            $('#weekContainer').html(result);

                            SelectLastUsedField();
                        });

                    }
                });
            }
        },
            {
                text: 'cancel',
                click: function (e) {
                    $('#errorList').empty();
                    $(this).dialog('close');
                }
            }],
        open: function (e) {

            $(this).html("Clicking ok will cause this day to be deleted.");

        },
        close: function (e) {
            $(this).empty();
            $(this).dialog('destroy');
        }
    });

}

Создайте диалог только один раз, но с одним div для каждого диалога в разметке, используя Close и передавая значения непосредственно с помощью Jquery Selectors

$(function() {

$('#confirmDeleteDialog').dialog({
        autoOpen: false,
        width: 300,
        title: 'Confirm Delete',
        modal: true,
        buttons: [{
            text: 'ok',
            click: function (e) {

                $(this).dialog('close');

                $.ajax({
                    url: '/Shift/ClearDay',
                    type: 'POST',
                    cache: false,
                    data: { shiftWeekID: $('#weekIDInput').val(), shiftLtDayID: $('#dayIDInput').val()},
                    success: function (result) {

                        LoadShiftPattern(function (result) {

                            $('#weekContainer').html(result);

                            SelectLastUsedField();
                        });

                    }
                });
            }
        },
            {
                text: 'cancel',
                click: function (e) {
                    $('#errorList').empty();
                    $(this).dialog('close');
                }
            }],
        open: function (e) {

            $(this).html("Clicking ok will cause this day to be deleted.");

        }
    });
}

function ClearDay() {

    $('#confirmDeleteDialog').dialog('open');

}

Приветствия

Джеймс

Ответы [ 2 ]

4 голосов
/ 15 апреля 2011

Если честно, я не уверен. Однако вы можете использовать профилировщик javascript для измерения времени, которое требуется для выполнения в любом случае.

Вот ссылка на мини-руководство по профилировщику javascript в инструментах разработчика Google Chrome http://code.google.com/chrome/devtools/docs/profiles.html

Я бы предположил, что второй вариант будет медленнее, так как я предполагаю, что селекторы в «данных» должны быть оценены и, следовательно, делать его медленнее.

Однако это будет зависеть от того, сколько раз диалог будет открыт / закрыт. Как я полагаю, разрушение и воссоздание будет медленным (хорошо, в мгновение ока, но, возможно, немного медленнее).

Первое похоже на более простую реализацию, поэтому, если производительность не кажется проблемой - возможно, просто выберите более простое из двух.

3 голосов
/ 15 апреля 2011

Зависит от того, сколько элементов вы используете с помощью функции ClearDay. Если количество элементов велико, то второй подход, т.е. (Создание одного диалога и его повторное использование) - это хороший подход, и наоборот.

...