2013-01-22 1 views
6

Łatwo oddzielić określone procedury obsługi zdarzeń od klas modeli, ale wydaje się, że jedynym sposobem na odwiązanie procedury obsługi zdarzeń z instancji modelu jest odwiązanie WSZYSTKICH procedur obsługi zdarzeń dołączonych do tej instancji za pomocą unbind() (nie przyjmuje żadnych argumentów).Spine.js - Jak usunąć powiązanie określonej procedury obsługi zdarzeń z instancji modelu za pomocą JavaScript?

Czy istnieje odpowiednik funkcji Model klasy "unbind([eventName, function]) dla instancji modelu, czy istnieje inny lepszy sposób na rozpinanie określonych modułów obsługi bez rozłączania ich wszystkich?

Sprawdziłem przez Spine.js documentation, ale bez powodzenia do tej pory. Dodanie argumentów do funkcji unbind() nie przynosi żadnego efektu - po prostu ignoruje je i rozwiązuje wszystkie.

+0

nigdy nie pracował z kręgosłupa, może być błąd. czy możesz napisać jakiś kod, żeby się upewnić? –

Odpowiedz

1

W końcu przeszliśmy na bardziej odpowiednie ramy dla naszych potrzeb, Backbone.js. Wydaje się, że konserwacja modelu Spine.js GitHub repository zatrzymała się we wrześniu zeszłego roku i, mimo że Spine obsługuje obsługę JavaScript, dokumentacja jest dość słaba.

Jeśli ktokolwiek może dostarczyć działającego rozwiązania pierwotnego problemu, nadal będę go akceptować z korzyścią dla każdego, kto się na to natknie.

0

Nie sądzę, że to konkretnie odpowiada na twoje pytanie, ale może doprowadzić cię do tego, do czego zmierzasz.

Kręgosłup ma nie tak udokumentowany .one() zdarzenia

ze źródła:

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

Więc w zasadzie robi unbind dla ciebie za kulisami, ale nie korzysta z modelu rozwiń, co właściwie powoduje "odłączenie".

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') 

Używamy @ item.one w kilku miejscach i odkryli, że działa dobrze.

przykład zastosowanie:

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

zmiana: Pracowaliśmy na niektórych rozwiązań do tej brakującej funkcji w Spine.js. zobacz ten numer: https://github.com/spine/spine/issues/418

+0

Nie do końca tego, czego szukaliśmy, ponieważ każdy z nich może zostać wywołany wiele razy, zanim nie zostanie usunięty, a ponadto nie używamy CoffeeScript. – Davecheesefish