2014-12-23 12 views
5

Ho recentemente aggiornato jquery-waypoints da 2.x a 3.x nel mio progetto e ho scoperto che molto del mio codice si è rotto. Tutti i riferimenti a $(this) all'interno dei miei gestori dovevano essere cambiati in $(this.element) che, una volta che ho capito era la causa dei miei problemi, era abbastanza facile da risolvere.Cosa è successo all'opzione triggerOnce in Waypoint 3.0?

Non sono stato in grado di capire cosa è successo all'opzione triggerOnce che impediva a un waypoint di sparare più volte. Qualche idea sul perché questo è stato rimosso e come posso ottenere la stessa funzionalità?

risposta

2

Ho trovato una soluzione. L'aggiunta di this.disable() alla fine del gestore disattiva il waypoint dopo che è stato attivato, impedendo che venga richiamato di nuovo. Penso davvero che questo dovrebbe essere documentato.

+1

Io uso 'this.destroy' alla fine del gestore, invece, perché (nel mio caso) So che non uso mai quell'istanza di nuovo comunque. – Norris

6

So che una risposta era già contrassegnata come corretta, ma mi piacerebbe espandermi oltre un semplice commento.

3.0, essendo una versione principale, ha apportato modifiche di rottura. Uno di questi è stata la rimozione di triggerOnce. È indicato nello changelog. Viene anche menzionato nello destroy docs dove viene utilizzato l'utilizzo di destroy alla fine del gestore come alternativa al vecchio triggerOnce.

In precedenza, triggerOnce in precedenza non era lo stesso di chiamare destroy perché tutti i metodi Waypoint venivano chiamati su oggetti jQuery. Gli elementi in quegli oggetti jQuery possono avere più waypoint collegati a loro, ma non c'era modo di separarli una volta creati. Se hai chiamato destroy tutti i waypoint su quell'elemento sono stati distrutti. L'opzione triggerOnce, tuttavia, funzionava su base waypoint individuale dietro le quinte. Ora che 3.0 restituisce direttamente le istanze della classe Waypoint e this all'interno del gestore è un riferimento all'istanza Waypoint anziché all'elemento, non c'è differenza tra triggerOnce e chiama this.destroy() per terminare un gestore. Quindi il codice è stato rimosso.

+1

Grazie per i dettagli extra e grazie per aver creato un fantastico plugin jQuery. Volevo solo notare, comunque, che ho provato a cercare un po 'di tempo per menzionare triggerOnce prima di postare qui. È una ricerca difficile da quando Waypoint è in circolazione da un po 'e ci sono molte menzioni di triggerOnce su pagine che sono ancora indicizzate da Google ma che ora reindirizzano alla nuova home page. Penso che una pagina dedicata nella documentazione sui suggerimenti per migrare da 2x a 3x sarebbe estremamente utile. Grazie ancora! – Yaron

+1

Yaron, sono d'accordo che potrebbe essere necessaria una guida alla migrazione. Inizialmente era sulla lista come un'altra pagina di Guida, ma ho deciso di resistere fino a quando ho visto quali erano i problemi reali che le persone stavano avendo durante la migrazione. Ti piace questo problema qui. :) – imakewebthings

+0

@imakewebthings E se chiamassi waypoint come $ 'this.waypoint (counterUpper, {offset: '100%', triggerOnce: true});'? dove si adatterebbe la funzione di distruzione? –

0

Se è necessario disabilitare un waypoint jQuery (v3.0):

$('.my-waypoint').waypoint(function(direction){ 
    // Do some stuff 
    this.destroy(); 
});