2010-04-27 15 views
5

Tengo curiosidad por cómo especificar las opciones para un plugin jQuery de una manera que algunas son necesarias, algunas están opcionalmente anuladas, y algunas no se pueden tocar.Opciones de jQuery plugin: obligatorio, opcional, inaccesible

Me comenzó con la habitual:

jQuery.fn.plugin = function (options){ 
    var defaults = { username: "", posts:10, api: "http://myapi.com" } 
    var settings = jQuery.extend({}, defaults, options); 
} 

Digamos que quiero username a ser necesaria, posts es opcional (por defecto es 10) y usted (siendo el usuario del plug-in) no se puede cambiar api, incluso si lo intentan. Idealmente, todos seguirían estando en la misma estructura de datos en lugar de dividirse en objetos separados. Ideas?

Respuesta

1

Si desea que se requiera un nombre de usuario, lo convertiría en un parámetro, dado que es lo único necesario y no hay 20 parámetros que quiera hacer de esta manera. Algo como esto:

jQuery.fn.plugin = function (username, options){ 
    var defaults = { posts:10, api: "http://myapi.com" } 
    var settings = jQuery.extend({}, defaults, options); 
} 

No hay una limpia necesaria manera de hacer esto por completo en un solo objeto pasado, al menos no una simple, que es lo que desea para una API. La alternativa sería especificar ningún valor predeterminado y alerta o algo si no está ahí supongo:

jQuery.fn.plugin = function (options){ 
    var defaults = { posts:10, api: "http://myapi.com" } 
    var settings = jQuery.extend({}, defaults, options); 
    if(typeof options.username == 'undefined') { 
    alert("You must specify a username"); 
    return this; 
    } 
} 

Editar - Missed parte de la pregunta, para los más inaccesibles, ya sea que los valores no modificable, ya ese es el mismo resultado, o un poco más limpio sería un objeto interno dentro de su complemento que está fuera del alcance en cualquier otro lugar. Una vez más, no es trivial que hacer en el mismo objeto a menos que usted guardó decir un objeto intenalDefaults, y llamó jQuery.extend() con él después la extensión de los ajustes que por lo que sería sobrescribir cualquier cosa que el consumidor se ha pasado.

5
$.fn.plugin = function(username, options) { 
    if (!username) throw "Must provide a username."; 

    var config = $.extend({}, $.fn.plugin.defaults, options); 

    var privateVal = 4; 
    ... 
} 

$.fn.plugin.defaults = { 
    posts: 10 
} 

Esto es una sumario:

  • Los parámetros requeridos se pasan más claramente como parámetros normales ordenados. Si hay demasiados de estos, considere algún tipo de estructura, o mejor, una API diferente.
  • Las opciones se especifican más fácilmente mediante un hash de opciones como el último parámetro. En general, estos deben ser opcional, pero es ciertamente posible lanzar y error si faltan.
  • Complete los valores predeterminados utilizando la función extend de jQuery. Por lo general, tendrá algunos "valores predeterminados" para recopilar estos. Me gusta ubicarlos en el nombre del plugin en sí mismo para el espaciado de nombres, y como documentación útil de las opciones disponibles.
  • Generalmente throw si falta un parámetro requerido.
  • Si tiene valores con los que no quiere que la persona que llama se meta con ellos, defínalos dentro de su complemento, donde el alcance de Javascript evitará que las personas que llaman jueguen con ellos.