Запуск и прослушивание событий в разных классах в Backbone — в CoffeeScript

По сути, я новичок в Backbone. С моей точки зрения, я меняю атрибут в своей коллекции под названием «лимит». Затем я пытаюсь инициировать событие (когда атрибут только что был изменен), что позволяет мне прослушивать событие и выполнять другие действия.

Однако запуск события из моей коллекции, когда что-то изменяется, и прослушивание этого изменения, когда оно происходит, не работает. Я предполагаю, что это как-то связано с общением представления и коллекции друг с другом. Любая помощь будет высоко оценена! Спасибо

Код для запуска события (внутри моей коллекции):

@trigger("change") #TRIGGER THE EVENT

Код для изменения атрибута в моей коллекции (который работает):

@Properties.attr("limit", "1000") #Change the limit attr to "1000"

И код для прослушивания изменений (который не работает):

@Properties.on("change", ->
     alert("Attribute has been changed!")
)

И полный код:

class PropertyCollection extends Backbone.Collection
        model: Property

        constructor: ->
            super

        initialize: ->
            @_attr = {}

        #Function to change attribute of collection 
        attr: (prop, value) ->
            if value is undefined
                @_attr[prop]
            else
                @_attr[prop] = value
                @trigger("change") #TRIGGER THE EVENT

        limit: "0" #Attribute - default is set to 0



    class HomeView extends Backbone.View
        constructor: ->
            super

        initialize: ->
                @Properties = new PropertyCollection

                @Properties.attr("limit", "1000") #Change the limit attr to "1000"

                #Listen for the change
            @Properties.on("change", ->
                 alert("Attribute has been changed!")
            )

        template: _.template($('#home').html())

        render: ->
            $(@.el).html(@template)

person Danny    schedule 16.08.2012    source источник


Ответы (1)


Вы регистрируетесь, чтобы прослушать это изменение ПОСЛЕ внесения изменения

Изменить атрибут -> триггерное событие -> никто не слушает -> зарегистрироваться для прослушивания

Итак, измените это:

initialize: ->
  @Properties = new PropertyCollection

  @Properties.attr("limit", "1000") #Change the limit attr to "1000"

  #Listen for the change after the firing of the change (why?!!!)
  @Properties.on("change", ->
    alert("Attribute has been changed!")
  )

к этому

initialize: ->
  @Properties = new PropertyCollection

  #Listen for the change BEFORE you make it (yes yes yes!!!)
  @Properties.on("change", ->
    alert("Attribute has been changed!")
  )

  @Properties.attr("limit", "1000") #Change the limit attr to "1000"

Надеюсь это поможет!

person jakee    schedule 16.08.2012
comment
ну так ессно и просто! Спасибо! - person Danny; 16.08.2012