Domanda

Creo widget jQuery qualcosa del genere

<script type="text/javascript">
(function ($) {
        $.widget("cb.bacon", {
            _create: function() {
                var self = this,
                    o = self.options,
                    el = self.element;

                 // Some code

            },

            _bacon: function() {
                var self = this,
                    o = self.options,
                    el = self.element;

                 // Some code
            },

            _smokey: function() {
                var self = this,
                    o = self.options,
                    el = self.element;

                 // Some code
            } 
        });
    })(jQuery);                 
</script>

Invariabilmente finisco per dichiarare self, options, element In ogni funzione che creo.

C'è una comprensione fondamentale che mi manca o devo davvero farlo sempre?

È stato utile?

Soluzione

Non devi farlo affatto, cioè solo per rendere più facile accedere a coloro che sono all'interno della funzione.

Il self La variabile è utile quando si utilizza un callback in una funzione jQuery, dove this sarebbe impostato sull'elemento su cui stai agendo. Per esempio:

$('.bacon').each(function(){ $(this).css('background', self.getBackground()); });

Le variabili o e el Rende solo meno digitazione. Se hai il varaibile self, o il riferimento this invariato, puoi accedere al options e element Proprietà dall'oggetto direttamente.

Altri suggerimenti

Devi dichiarare queste cose ogni volta poiché stai usando un oggetto letterale. Potresti avvolgere l'oggetto letterale come una funzione di funzione e ottenere ciò che vuoi in quel modo.

<script type="text/javascript">
function makeTheBacon() {
    var self = this;
    var o = self.options;
    var el = self.element;

    self._create = function() {...};
    self._bacon = function() {...};
    self._smokey = function() {...};
    return self;
}

(function ($) {
    $.widget("cb.bacon", makeTheBacon());
})(jQuery);
</script>

Ci sono anche domande che si toccano anche usando le funzioni nell'oggetto letterale qui, ma sembrava eccessivamente verbosio considerando la tua domanda originale.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top