2009-04-16 15 views
13

¿Alguien ha extendido un plugin jQuery existente?Extensión de un complemento jQuery

No estoy seguro de por dónde empezar. Prefiero no copiar y modificar realmente el complemento que deseo extender. ¿Lo hago a través de un prototipo o simplemente de una extensión del plugin en cuestión?

¿O estoy soñando que tendría sentido hacer esto?

Respuesta

10

EDIT: Como se ha señalado por Seb, esto no es estrictamente un ejemplo de 'extender' un plugin, más 'encapsular' un plugin, así que toma como viene :)

Aquí hay algo que hice para simplificar mi uso de la jquery autocomplete plugin hace un tiempo:

// small autocomplete plugin wrapping the full autocomplete plugin for a standard look and feel 
(function($) { 
    $.fn.standardAutocomplete = function(type) { 
     return this.autocomplete(ToAbsoluteUrl("~/System/Autocomplete/" + type), { 
      formatItem: formatItem, 
      formatResult: formatResult 
     }); 
     // Autocomplete formatting callbacks 
     function formatItem(row) { return row[0] + "<span class=\"sub\">" + row[1] + "</span>"; } 
     function formatResult(row) { return row[0].replace(/(<.+?>)/gi, ''); } 
    } 
})(jQuery); 

Ahora que no está siguiendo "por el libro" práctica de codificación jQuery - por ejemplo, No estoy explicando el hecho de que podría haber múltiples elementos seleccionados, pero en este caso, sé que nunca voy a seleccionar más de un elemento en una página con esto, así que quería mantenerlo simple, y "funciona para yo". Es posible que pueda utilizar un enfoque similar, tal vez con un poco más de sofisticación.

+0

En realidad, estaba considerando ese método, ya que se siente menos sucio que copiar y pegar. ¿Me perdonarás si espero una respuesta 'por el libro' por un tiempo antes de marcar la tuya como la respuesta? :) –

+0

Por supuesto, no hay problema :) –

+6

Esto es un contenedor, no extiende ninguna clase ni objeto. De hecho, estás creando un nuevo complemento que utiliza otro, pero no tiene ninguno de los métodos ni opciones del otro complemento, en ese caso, estás ampliando cualquier cosa. – Seb

2

Si el complemento está bien hecho, entonces no tiene muchas alternativas más que usar su options para cambiar su comportamiento.

El propósito de esto es que todo su código está encapsulado y no interfiere con ningún otro código, por lo que no puede insertar ningún código en él.

Si realmente necesita cambiar su comportamiento, entonces supongo que necesitará copiar & pegue el código.

+1

En herencia típica no está inyectando código, sino ampliando el objeto, creando uno nuevo. ¿No podemos usar herencia normal en este caso? No estoy buscando modificar un método existente, sino agregar métodos y similares. –

+0

Ver mi comentario en la respuesta de Steve para saber mi opinión. En resumen, creo que no podrás extender, pero _WRAP_, que es algo completamente diferente de lo que pediste. – Seb

+0

Entiendo que es una envoltura, por lo que fue mi * segunda * opción en comparación con la herencia verdadera. –

Cuestiones relacionadas