2013-01-22 14 views
6

È piuttosto semplice separare specifici gestori di eventi dalle classi del modello, ma sembra che l'unico modo per separare un gestore di eventi da un'istanza di un modello è di separare TUTTI i gestori di eventi collegati a quell'istanza utilizzando unbind() (non accetta argomenti).Spine.js - Come si separa un gestore di eventi specifico da un'istanza di modello utilizzando JavaScript?

Esiste un'equivalente della classe Modello 'unbind([eventName, function]) per le istanze del modello oppure esiste un altro modo migliore per separare specifici gestori senza disassociarli tutti?

Ho guardato attraverso il Spine.js documentation ma senza fortuna finora. L'aggiunta di argomenti alla funzione unbind() non ha alcun effetto, ma li ignora e li separa comunque.

+0

non ha mai funzionato con la colonna vertebrale, potrebbe essere un bug. puoi pubblicare un codice per essere sicuro? –

risposta

1

Alla fine siamo passati a un framework più adatto alle nostre esigenze, Backbone.js. La manutenzione su Spine.js GitHub repository sembra essersi arrestata a settembre dell'anno scorso e, sebbene Spine supporti l'uso con JavaScript, la documentazione è piuttosto scarsa.

Se qualcuno è in grado di fornire una soluzione operativa al problema originale, lo accetterò comunque a beneficio di chiunque altro si imbatta in questo.

0

Non penso che questo risponda in modo specifico alla tua domanda ma potrebbe portarti a quello che stai cercando.

Spine ha un .one non così documentato() evento

dalla fonte:

one: (ev, callback) -> 
    @bind ev, -> 
    @unbind(ev, arguments.callee) 
    callback.apply(this, arguments) 

Così è fondamentalmente fa il Unbind per voi dietro le quinte, ma non usa una modella unbind che in realtà attiva solo 'unbind'.

unbind: (ev, callback) -> 
    unless ev 
    @_callbacks = {} 
    return this 

    list = @_callbacks?[ev] 
    return this unless list 

    unless callback 
    delete @_callbacks[ev] 
    return this 

    for cb, i in list when cb is callback 
    list = list.slice() 
    list.splice(i, 1) 
    @_callbacks[ev] = list 
    break 
    this 

vs.

unbind: -> 
    @trigger('unbind') 

Usiamo @ item.one in pochi posti e abbiamo trovato funziona bene.

esempio l'uso:

@item.one 'awaitingPermit', (item) => 
    @navigate('/document', item.id, 'show') 

aggiornamento: Abbiamo lavorato su alcune soluzioni a questa caratteristica mancante in Spine.js. vedi questo thread in discussione https://github.com/spine/spine/issues/418

+0

Non proprio quello che stiamo cercando dato che ogni gestore può essere chiamato più volte prima di essere libero, oltre a non usare CoffeeScript. – Davecheesefish

Problemi correlati