Domanda

se estendo il fn jquery (come $ .fn.extend) scrivo il mio plugin:

(function($){
    $.fn.extend({
        functionName : function(){
             //function returns
             return this.each(function(){
                  $(this).append("<div>text</div>");
             });
        }
    });
})(jQuery);

quando voglio estendere jQuery namespace scrivo in questo modo:

(function($){
    $.extend({
        functionName : function(){
             //function returns

        }
    });
})(jQuery);

quello che non so è come scrivere il 'ritorno' in questo caso

È stato utile?

Soluzione

Aggiorna

Quando si sta facendo più operazioni che coinvolgono più di un selettore, si deve decidere che cosa ha più senso. Se un selettore è l'obiettivo primario, ma gli effetti di altri articoli così, scrivere come un plug-in, e restituire il risultato primario impostato in questo modo:

$.fn.myAction = function(secondarySelector){
      return this.each(function(){
          $(this).css('display', 'block');
          $(secondarySelector).hide();
      });
};

// Use:
// $(primarySelector).myAction(secondarySelector);
$("#id").myAction(".address"); // Chain continues after action

Se i selettori sono tutti uguali per importanza, quindi è sufficiente creare una funzione che non restituisce nulla o ritorna true / false seconda successo.

Un altro modo per strutturare il codice:

Il metodo estendere viene utilizzato in altri ambiti OOP e, come avete dimostrato, può essere utilizzato con jQuery pure. Cosa si può trovare, però, è che molti sviluppatori jQuery optare per il più breve sintassi più evidente in questo modo:

(function($){

    // The if statement allows the file to be used with
    // other files that use the same shared namespace
    if(!$.Namespace){
        $.Namespace = { };
    };

    $.Namespace.Constructor = function( params ){
       ... code ...
    };

    // And for the wrapper sets ($.fn):
    $.fn.functionName = function(opts){
       return this.each(function(){
          ... code ...
       });
    };

})(jQuery);

Altri suggerimenti

È possibile restituire ciò che ti piace in seconda istanza. Peresempio pensare $.each() contro $.get(). Tuttavia, se fossi in te vorrei evitare di utilizzare questo come uno spazio dei nomi funzione - si può portare a inquinamento. Invece si shoudl prenotare questo per aggiungere il proprio spazio dei nomi sotto il namespace jquery come:

(function($){
    $.extend({
        myNamspace : {
          functionName: function(){
            // return whatever
          }
        }
    }});
})(jQuery);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top