Разрешить вызывающей функции переопределять параметры по умолчанию - JQuery UI диалог - PullRequest
2 голосов
/ 21 января 2011

Я хочу, чтобы callFunction мог переопределить параметры по умолчанию, предусмотренные в функции showDivPopUp.

function calling(){
  showDivPopUp("title of pop up box", "message to show", 
        {
            buttons:{
                        Yes: function () {
                                $(this).dialog("destroy");
                            },
                        No :function () {
                                $(this).dialog("destroy");
                            }                        
                    }      
        });
}

function showDivPopUp(title,msg,options){
  var mgDiv = $("#msgDiv");
  mgDiv.attr("innerHTML", msg);
  return mgDiv.dialog({
    modal: true,
    buttons: {
      Ok: function () {
        $(this).dialog("destroy");
      }
    },
    resizable: true,
    show: "explode",
    position: "center",
    closeOnEscape: true,
    draggable: false,
    title : titl,
    open: function (event, ui) { $(".ui-dialog-titlebar-close").hide(); }
  });
}

Итак, приведенный выше код должен отображать две кнопки, а именно.Yes и No вместо OK.Я не хочу делать if проверку для каждого варианта.

ОБНОВЛЕНИЕ: В параметре параметров могут быть параметры, для которых значение по умолчанию не применяется.Таким образом, вызывающая функция может указывать опцию size, которая не упоминается в функции showDivPopUp.

Ответы [ 3 ]

11 голосов
/ 23 марта 2011

Вы хотите использовать метод extend () JQuery, чтобы объединить передаваемые вами опции в функцию со значениями по умолчанию, указанными в ней.1006 *

//calling function source excluded, use exactly the same.

function showDivPopUp(title, msg, options) {

    //create basic default options
    var defaults = {
        modal: true,
        buttons: {
            Ok: function() {
                $(this).dialog("destroy");
            }
        },
        resizable: true,
        show: "explode",
        position: "center",
        closeOnEscape: true,
        draggable: false,
        title: title,
        open: function(event, ui) { $(".ui-dialog-titlebar-close").hide(); }
    }

    //merge the specified options with the defaults.
    //in example case, will have the above except with the new buttons specified
    if (typeof options == 'object') {
        options = $.extend(defaults, options);
    } else {
        options = defaults;
    }


    var mgDiv = $("#msgDiv");
    mgDiv.attr("innerHTML", msg);
    return mgDiv.dialog(options); 
}
1 голос
/ 21 января 2011

Похоже, «параметры» в формате JSON. Попробуйте опустить первую часть {buttons: в третьем аргументе для showDivPopUp или установить buttons: options.buttons в функции showDivPopUp.

Чтобы расширить это, создайте больше пар json и проверьте их наличие в функции showDivPopUp. Существует? Override. Не существует? Сохранить значения по умолчанию.

{buttons:{
  Yes: function () {
    $(this).dialog("destroy");
  },
  No :function () {
    $(this).dialog("destroy");
  }                        
},
background:"blue",
fontsize:15
}

Доступ к каждому через:

options.buttons
options.background
options.fontsize

Проверка на существование с использованием:

if ( typeof( window[ 'option.fontsize' ] ) != "undefined" ) {override code}

Ответ на обновление в вопросе:
Используйте jquery.each для перебора всех элементов в переданном параметре.

0 голосов
/ 21 января 2011

В вашей функции mgDiv.dialog измените клавишу buttons, чтобы получить условное значение. E.g.:

function showDivPopUp(title,msg,options){
  var mgDiv = $("#msgDiv");
  mgDiv.attr("innerHTML", msg);
  return mgDiv.dialog({
    modal: true,
    buttons: options.buttons || {
      Ok: function () {
        $(this).dialog("destroy");
      }
    },
    resizable: true,
    show: "explode",
    position: "center",
    closeOnEscape: true,
    draggable: false,
    title : titl,
    open: function (event, ui) { $(".ui-dialog-titlebar-close").hide(); }
  });
}
...