2011-06-30 15 views
6

Mam następujący widok szkieletowej:backbone.js pobrać zmieniony zdarzenia nie wypalania po udanej sprowadzić

klasa Obserwacja rozciąga Backbone.Model

class Observations extends Backbone.Collection 
    model: Observation 

    constructor: -> 
    @url = _observationsUrl 

class ObservationsView extends Backbone.View 
    el: $('#observations') 

    initialize: -> 
    _.bindAll @  
    @model.bind 'changed', @render 
    @model.view = @ 
    that = @ 
    @model.fetch { 
     success: -> 
     alert('success') 
     that.model.trigger 'changed' 
    } 

    render: => 
     alert('rendering baby') 

class ObservationsController extends Backbone.Controller 
    initialize: -> 
    observations = new Observations() 
    observationsView = new ObservationsView(model: observations) 

jestem wiążące modelki zmieniła wydarzenie metody renderowania z ObserwacjiView. Model jest kolekcją szkieletu.

Ładowanie działa, ale zmienione zdarzenie nie jest uruchamiane. Próbuję ręcznego spustu z desperacji.

Czy ktoś może zobaczyć, co robię źle?

Odpowiedz

5

Zdarzenie nie jest nazywane "zmienionym". Zdarzenie wywoływane po odświeżeniu kolekcji modelu z serwera jest "odświeżone".

Zdarzenie "zmiana" jest w rzeczywistości bardziej skomplikowane. To wydarzenie na modelu, który jest wywołany kiedy zadzwonisz .set(), i zawsze zawiera atrybut, więc chcesz napisać takie rzeczy jak:

this.model.bind('change:username', _.bind(this.update_username_display, this)) 

Jak zawsze, kod źródłowy backbone.js jest wybitnie czytelny.

+1

Zdarzenie wywoływane po odświeżeniu kolekcji modelu jest w rzeczywistości "resetowane", a nie "odświeżanie". –

Powiązane problemy