2011-04-23 7 views
13

Sé que puedo crear complementos jQuery personalizados utilizando el constructor $.fn.myFunction y llamar a la función personalizada en JavaScript como $('selector').myFunction().Creación de una función jQuery personalizada sin prerrequisito del selector

Sin embargo, para un proyecto en el que estoy trabajando actualmente, necesito poder definir una función que no requiera que funcione un selector. Esto es realmente para un complemento MessageBox, que actuará de manera similar a C# MessageBox clase. Como tal, lo ideal sería crear la función que MessageBox, y luego llamar de la siguiente manera:

var myMessage = $.MessageBox(); y luego a su vez myMessage.Show();

Aviso la falta de corchetes selector en la referencia jQuery al comienzo de la Llamada de función.

Cualquier consejo sobre la mejor práctica para esto sería recibido con gratitud.

Respuesta

14

Esto debería funcionar:

jQuery.MessageBox = function() { 
    var show = function() { 
    // something... 
    } 
    var hide = function() { 
    // something... 
    } 
    return { 
    show: show, 
    hide: hide 
    } 
} 
+1

es esta buena práctica? – relipse

+0

@relipse: ¿Puedes aclarar por qué tienes dudas? – Amadan

+3

Porque me pregunto si jugar con el espacio de nombres de jquery es una buena práctica, o hay otra forma. Mientras tanto, he implementado mi propio cuadro de diálogo que no usa un selector que sea similar a su código anterior. https://github.com/relipse/jquery-dialogPrompt ¡Conozco a YAHOO! la biblioteca tiene una función especial YAHOO.namespace() para declarar la suya. – relipse

5

relipse tiene un buen punto - a medida que son desordenados en el espacio de nombres principal. Una solución si tienes más objetos que solo por ej. De mensaje es crear su propio espacio de nombres como esto:

jQuery.myLib = { 
    MessageBox: function() { 
    var show = function() { 
     // something... 
    } 
    var hide = function() { 
     // something... 
    } 
    return { 
     show: show, 
     hide: hide 
    } 
    } 
} 

Eso significa que sólo está tomando un lugar en el espacio de nombres principal (el nombre de la biblioteca, en este caso myLib). Que se dice así:

jQuery.myLib.MessageBox.show() 
1
(function ($) { 
    $.MessageBox = function() { 
     var show = function() { 
      // something... 
     } 
     var hide = function() { 
      // something... 
     } 
     return { 
      show: show, 
      hide: hide 
     } 
    } 
})(Jquery); 

Creo que es mejor el alcance de la función de invocación inmediata para evitar la colisión con los espacios de nombres.

Cuestiones relacionadas