2010-04-12 12 views
5

Yo sé hacer plugins, pero no como lo hago opciones anidadas como:¿Cómo hago opciones anidadas para plugins de jQuery

var defaults = { 
    spacing:10, 
    shorten_to:50, 
    from_start:0, 
    from_end:2, 
    classes: { 
     test:'testing' 
    } 
}; 

i que no está bien, ya no sé nada cómo escribir la sintaxis correcta cuando quiero hacer algo como esto:

$('#breadcrumbs').breadcrumbs({classes{test:'new_example'},spacing:12}) 

otras sugerencias son bienvenidos, im en la necesidad de la capacidad de los nombres de clases personalizadas y hay 7, por lo que en lugar de hacer algo parecido test_cla ss, example_class, etc id me gusta más limpio y más limpio como el ejemplo anterior.

Respuesta

2

Su complemento toma un parámetro de opciones y las personas pasan los parámetros al plugin utilizando un objeto literal. A continuación, usa $ .extend para combinar las opciones con los valores predeterminados. Aquí hay un patrón para un complemento que puedes copiar.

//Create closure 
(function($) { 

    var defaults = { //Default settings for breadcrumbs 
     async: false, 
     race: 100, 
     interval: 1, 
     classes: { 
      test:'testing' 
     } 
    }; 

    //Plugin definition 
    $.extend({ 

     //Execute the functions added to the stack 
     breadcrumbs: function(options) { 

      options = $.extend(true, defaults, options); 

      //Loop through each item in the matched set and apply event handlers 
      return this.each(function(i) { 

       //Code here , this = current selection 
      }); 
     } 
    }); 

// end of closure and execute 
})(jQuery); 

Se podría llamar a este plug-in al igual que

$('div').breadcrumbs({async:true, interval:2, classes: {another: true}}); 
+0

tengo todo eso, tenía curiosidad por anidar los valores predeterminados :) –

+0

Ok. Actualizado. $ .extend debería hacer una 'extensión profunda'. –

+0

impresionante, gracias ... pero el único problema es después de que agregué el {} en la extensión, ¿no cambia los valores predeterminados? –

3

En realidad eso es correcto. Su notación no es conocido como JSON, y es una notación extremadamente simple (ver json.org)

var someobject = { prop: 'prop' }; 
var anotherobject = { name: 'name' }; 
someobject.someproperty = anotherobject; 

es equivalente a

var someobject = { prop: 'prop', { name: 'name' }}; 

En el segundo ejemplo, que está sólo faltan dos puntos.

$('#breadcrumbs').breadcrumbs({classes:{test:'new_example'},spacing:12}) 
+0

gracias, muy cerca, pero ahora, i si no totalmente ajustada de ellos que son todos, pero el definido uno, indefinido. P.ej. $ ('# top-breadcrumbs'). breadcrumbs ({classes: {breadcrumb_item: 'the_bc'}, delay_time: 100}); hace CADA uno indefinido, PERO breadcrumb_item. Quiero que funcione como la forma predeterminada de jQuery o personalizada –

+0

@Oscar, para eso necesitarás la función de extensión de Jquery con copia profunda como muestra James. – Joel

Cuestiones relacionadas