Pregunta

He escrito un complemento para resaltar los términos utilizados para encontrar un página . La fuente es también disponible .

Mi problema es que si miras el JavaScript en línea del primer enlace, he creado una función de colocación de texto personalizada para manejar la inserción de la barra de visualización (se parece un poco al desbordamiento de pila).

Como puede ver, tengo un controlador de eventos en el botón que se inserta. He codificado la eliminación de la barra, pero también me gustaría eliminar el resaltado de los términos. El complemento tiene un método para hacer esto llamado toggleTermHighlighting () .

¿Cómo puedo llamar a ese método desde la función anónima en la página de ejemplo? ¿Necesitaría hacerlo this.toggleTermHighlighting = function () {} . Intenté pasar una instancia de esto al primer argumento, pero no pude hacerlo funcionar.

Lo siento, parece que siempre tengo dificultades con el alcance en JavaScript.

¿Alguien sabe qué podría hacer para poder acceder a ese método desde la función anónima desde la página de ejemplo?

¿Fue útil?

Solución

Creo que si reestructurara la forma en que se definió la función dentro del complemento, sería mucho más fácil.

Cambiar la línea 128 de:

var toggleTermHighlighting = function() {

a:

this.toggleTermHighlighting = function() {

Entonces puede hacer algo como esto para acceder a la función desde un alcance totalmente diferente:

var myPlug = new $.fn.searchTermsHighlight();
myPlug.toggleTermHighlighting();

Esta sería una respuesta a su pregunta, pero creo que un enfoque diferente podría ser más apropiado. Si observa gran parte del código de jQuery UI, puede pasar una cadena al complemento y ejecutará una función para usted. Así que en realidad podrías hacer algo como:

$('body').searchTermsHighlight('toggle');

y luego simplemente verifíquelo en la parte superior de su función, o en una función de tipo init ()

if (options === 'toggle'){ toggleTermHighlighting(); return this; }

Otros consejos

Tendrás que hacer "toggleTermHighlighting" una función jQuery expuesta por derecho propio, o bien exponer su funcionalidad como una opción en su método existente. Bueno, si quisieras hacer algo un poco extraño, podrías rellenar la función (y cualquier otra cosa que desees) en un elemento de datos en el objeto afectado (consulta la función jQuery " data ").

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top