2010-04-12 8 views
5

so come fare i plugin, ma come faccio a fare le opzioni nidificate come:Come posso fare opzioni nidificate per i plugin di jQuery

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

i so che non è giusto, io non è sufficiente sapere come scrivere la sintassi corretta quando voglio fare qualcosa di simile questo:

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

altri suggerimenti sono benvenuti, im bisogno della capacità di nomi di classe personalizzati e ci sono 7, quindi piuttosto che fare qualcosa di simile test_cla ss, example_class, etc id come se fosse più pulito e ordinato come nell'esempio sopra.

risposta

2

Il plug-in utilizza un parametro di opzioni e le persone passano i parametri nel plug-in utilizzando un oggetto letterale. Quindi utilizzare $ .extend per combinare le opzioni con i valori predefiniti. Ecco un modello per un plug-in che è possibile copiare.

//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); 

Si potrebbe chiamare questo plug-in in questo modo

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

ho tutto questo, ero curioso di come annidare le impostazioni predefinite :) –

+0

Ok. Aggiornato. $ .estendere dovrebbe fare un 'estensione profonda'. –

+0

fantastico, grazie ... ma l'unico problema è dopo aver aggiunto il {} nella sua estensione, non cambia i valori predefiniti? –

3

In realtà è corretto. Il tuo notazione non è conosciuto come JSON, ed è una notazione estremamente semplice (vedi json.org)

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

equivale a

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

Nel vostro secondo esempio, si sta solo manca un colon.

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

grazie, molto vicino, ma ora, se ho dont impostare tutti di loro sono tutti, ma il definito uno, indefinito. Per esempio. . $ ('# Piú pangrattato') pangrattato ({classi: {breadcrumb_item: 'the_bc'}, DELAY_TIME: 100}); ne rende OGNI uno indefinito, MA breadcrumb_item. Voglio che funzioni come il normale metodo jQuery predefinito o personalizzato –

+0

@Oscar, per questo avrai bisogno della funzione di estensione di Jquery con la copia profonda come mostrato da James. – Joel

Problemi correlati