2012-02-15 18 views
5

Tengo varios controladores de jQuery UI Diálogos, todos los cuales contienen lo siguiente:jQuery UI de diálogo - establece una configuración por defecto

open: function(event, ui) { 
     $(".ui-dialog-titlebar").removeClass("ui-corner-all"); 
     $(".ui-dialog").removeClass("ui-corner-all"); 
}, 

Esto es para que el diálogo tiene esquinas cuadradas, en lugar de los redondos. Me preguntaba si es posible tener este conjunto como predeterminado, para que no tenga que insertar este código en cada configuración de diálogo en la página.

Sé que puedo editar el CSS, pero tiene más sentido eliminar realmente la clase si no es necesario.

+0

¿Qué quiere decir con 'establecer como predeterminado'? Eso sería editar el CSS. No veo la necesidad de utilizar JavaScript cada vez que se abre el cuadro de diálogo cuando puede editar fácilmente el CSS para eliminar las esquinas redondeadas. – j08691

+0

Quizás desee ver esto para obtener una mejor respuesta: http://stackoverflow.com/questions/2287045/override-jqueryui-dialog-default-options – phazei

Respuesta

8

Sé que no es perfecto, pero podría definir su propio objeto defaults que contiene sus valores predeterminados. Entonces, si usted necesita para anular o añadir a los valores por defecto, se puede usar $.extend:

var dialogDefaults = { 
    open: function (event, ui) { 
     $(".ui-dialog-titlebar").removeClass("ui-corner-all"); 
     $(".ui-dialog").removeClass("ui-corner-all"); 
    } 
}; 
// then later on: 
$("#foo").dialog($.extend({ }, dialogDefaults, { 
    autoOpen: false, 
    width: 500, 
    /* etc... */ 
})); 

recordar también que para los eventos, puede unirse a ellos fuera de las opciones objeto utilizando on (o sus hermanos delegate, bind y live). Se puede aplicar ese controlador de eventos para varios cuadros de diálogo mediante la aplicación de la misma clase a todos sus diálogos, por ejemplo:

$("div.my-dialog-class").on("dialogopen", function (event, ui) { 
    $(".ui-dialog-titlebar").removeClass("ui-corner-all"); 
    $(".ui-dialog").removeClass("ui-corner-all"); 
}); 

Hemos de tener en cuenta que este controlador de eventos no se disparará fuera para los nuevos diálogos. Usted puede dejar que la burbuja evento hasta el DOM a la body y adjuntar el controlador de eventos allí (esta es la ruta que iría):

$(document.body).on("dialogopen", "div.my-dialog-class", function (event, ui) { 
    $(".ui-dialog-titlebar").removeClass("ui-corner-all"); 
    $(".ui-dialog").removeClass("ui-corner-all"); 
}); 

Con este método de delegación de eventos, que está solicitando su función open a todos cuadros de diálogo que alguna vez se anexarán al document.body.

+0

¿Cuál sería la sintaxis para usar este concepto predeterminado para varias configuraciones de propiedades de diálogo (¿dije eso bien también? Tengo una serie de diálogos que todos comparten alrededor de 10-12 ajustes de propiedades comunes y el mantenimiento se está convirtiendo en una tarea ardua. Sería bueno tener que preocuparse por la configuración única por diálogo. – InteXX

+0

OK, lo tengo. Habló demasiado pronto. Acabo de agregarlos como siempre, antes de abrir: llamar. Usé [esto] (http://stackoverflow.com/questions/5409633/how-to-set-jquery-ui-dialog-defaults) como referencia. Funciona muy bien, gracias. – InteXX

Cuestiones relacionadas