2012-12-13 3 views
7

sto usando il widget di jQuery UI fabbrica.modo giusto per creare una variabile di istanza utilizzando jQuery UI Widget Factory

$.widget("myPlugin" , { 

    options: { 
    }, 

    _create: function() { 
    }, 

    instanceVar: "huzzah!" 

}); 

In fase di test, sembra che instanceVar sia effettivamente parte del prototipo. Quindi è lo stesso su tutte le istanze del plugin.

posso risolvere questo problema mettendo instanceVar in opzioni, in questo modo:

$.widget("myPlugin" , { 

    options: { 
     instanceVar: "huzzah!" 
    }, 

    _create: function() { 
    }, 

}); 

Tuttavia che sembra strano, come instanceVar è solo una variabile interna per l'utilizzo da parte del plugin - non qualcosa che l'utente del plugin dovrebbe essere in grado di cambiare.

C'è un altro (migliore) modo per raggiungere questo obiettivo?

Grazie per il vostro aiuto!

+2

È possibile memorizzare i dati privati ​​sulla istanza stessa , per esempio, all'interno della _create, si dovrebbe essere in grado di fare 'this.instanceVar = "huzzah!"' –

risposta

12

È possibile memorizzare i dati privati ​​sulla istanza stessa, ad esempio, all'interno del _create, si dovrebbe essere in grado di fare this.instanceVar = "huzzah!"

$.widget("ui.myPlugin", { 

    options: { 
     foo: "foo" 
    }, 

    _create: function() { 
     this.instanceVar = "huzzah!" 
    }, 

    _setOption: function() { 
     this.instanceVar = "worky!"; 
    }, 

    destroy: function() { 
     console.log(this.instanceVar); 
    } 

}); 

$(document).myPlugin().myPlugin("option","foo","bar").myPlugin("destroy"); // "worky" 

$("body").myPlugin().myPlugin("destroy"); // "huzzah! 

Demo: http://jsfiddle.net/PGUqr/

+1

È inoltre possibile dichiarare una variabile di istanza privato, proprio come si farebbe con una funzione utilizzando il prefisso di sottolineatura come una convenzione. _instanceVar: undefined, –

+3

Si noti che l'utilizzo del prefisso di sottolineatura non impedisce effettivamente l'accesso a tali membri e metodi "privati". Puoi ancora accedervi tramite $ ('# myElement'). Dati ('pluginName') ._ foo. Cosa aggiungendo il carattere di sottolineatura non è di omettere quella funzione di essere disponibile tramite il solito modo di chiamare i metodi sul widget di: $ ('# MyElement') pluginName ('somePublicFunction').. Una volta che hai un riferimento all'istanza del widget, hai pieno accesso a tutto, indipendentemente dal fatto che abbia un trattino basso. – jinglesthula

+0

Si noti inoltre che, anche se il membro 'option' non ha un carattere di sottolineatura, la documentazione indicare l'accesso ai suoi contenuti tramite il metodo .OPtion(): https://api.jqueryui.com/jquery.widget/#method-option – jinglesthula

Problemi correlati