Complemento Superfish: $.fn.extend({...}) -- ¿Cómo funciona este código?

Superfish JS es aquí.

Aquí está el código relevante:

$.fn.extend({
    hideSuperfishUl : function() {
        // ...code here...
        return this;
    },
    showSuperfishUl : function(){
        // ...code here...
        return this;
    }
});

Preguntas:

¿Afecta la regulación de la $.fn.extend({...}); permitir que los usuarios anulen hideSuperfishUl & showSuperfishUl funciones? Si es así, ¿cómo se ve la sintaxis para cambiar estos métodos al llamar al complemento?

<script> 

    $(document).ready(function() { 
        $('ul.sf-menu').superfish(); // How to override hideSuperfishUl &/or showSuperfishUl?
    }); 

</script>

Superfish se escribió hace un tiempo... ¿Sigue siendo la mejor manera de permitir que los usuarios anulen el complemento? . funciones/métodos/otros? Si no, ¿hay una "mejor" manera?

preguntado el 02 de julio de 12 a las 00:07

¿Has revisado jQuery? $.extend() ¿documentación? -

@JaredFarrish ¡Gracias por responder! Leí los documentos, pero no entendí completamente cómo funciona en relación con Superfish. Sin embargo, ahora estoy releyendo documentos. ¡Gracias! -

1 Respuestas

Voy a tratar de responder a mi propia pregunta aquí... ¡Por favor corrígeme si algo de lo que escribo a continuación está mal! ;)


Este artículo dice lo siguiente:

ampliar

En mi opinión, esta es la forma menos idiomática de crear un complemento jQuery. utiliza el jQuery.fn.extend método en lugar de jQuery.fn.pluginName:

(function($){
  $.fn.extend({
      myPlugin: function() {
          return this.each(function(){
              // do something
          });
      },
      myOtherPlugin: function() {
          return this.each(function() {
              // do something
          });
      }
  });
})(jQuery);

Esta estructura le resultará útil si necesita agregar una gran cantidad de métodos de complemento a jQuery. Sin embargo, diría que si su complemento necesita agregar tantos métodos, puede haber una mejor manera de estructurar su implementación.

Siento que los programadores que hacen la transición de otras bibliotecas JS usan más el método de extensión. Personalmente encuentro lo simple. $.fn.pluginName = estructura para que sea más fácil de leer y más en línea con lo que normalmente verá en los complementos de jQuery.

Superfish JS está utilizando el mismo código que se encuentra en la cita anterior; larga historia corta, showSuperfishUl() y hideSuperfishUl() se encuentran las adicional complementos en jQuery $.fn espacio de nombres

Pude anular dichas funciones así:

jQuery(function(){

    $.fn.showSuperfishUl = function() {
        console.log('OMG');
        return this;
    };

    $.fn.hideSuperfishUl = function() {
        console.log('BECKY');
        return this;
    };

    jQuery('ul.sf-menu').superfish();
});

Siguiente, este artículo dice:

Proporcionar acceso público a funciones secundarias según corresponda

// plugin definition
$.fn.hilight = function(options) {
  // iterate and reformat each matched element
  return this.each(function() {
      var $this = $(this);
      // ...
      var markup = $this.html();
      // call our format function
      markup = $.fn.hilight.format(markup);
      $this.html(markup);
  });
};
// define our format function
$.fn.hilight.format = function(txt) {
  return '<strong>' + txt + '</strong>';
};

Podríamos haber admitido fácilmente otra propiedad en el objeto de opciones que permitiera proporcionar una función de devolución de llamada para anular el formato predeterminado. Esa es otra excelente manera de admitir la personalización de su complemento. La técnica que se muestra aquí lleva esto un paso más allá al exponer la función de formato para que pueda redefinirse. Con esta técnica, sería posible que otros enviaran sus propias anulaciones personalizadas de su complemento; en otras palabras, significa que otros pueden escribir complementos para su complemento.

Conclusión:

Ambos $.fn.extend y $.fn.pluginName.function son similares y permiten al usuario final anular fácilmente la funcionalidad; el primero agrega nuevos complementos a jQuery $.fn espacio de nombres, mientras que las últimas son funciones que están contenidas dentro de un único $.fn.pluginName espacio de nombres

Resumen y mejores prácticas dice:

No abarrote el objeto jQuery.fn con más de un espacio de nombres por complemento.

... por lo tanto, mi elección para la "mejor" técnica es $.fn.pluginName.function.

Respondido 11 Abr '13, 21:04

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.