在 Backbone - 在 CoffeeScript 中触发和侦听不同类的事件

Triggering and Listening to Events across different classes in Backbone - In CoffeeScript

本文关键字:同类 事件 Backbone CoffeeScript      更新时间:2023-09-26

基本上我是Backbone的新手。在我看来,我正在更改集合中名为"limit"的属性。然后我尝试触发一个事件(当属性刚刚更改时),允许我侦听事件并执行其他操作。

但是,当某些内容发生更改时触发我的集合中的事件,并在发生更改时侦听该更改是行不通的。我认为这与视图和集合相互通信有关。任何帮助将不胜感激!谢谢

触发事件的代码(在我的集合中)是:

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

在进行更改后注册以侦听该更改

更改属性 ->触发事件 ->无人侦听 ->注册侦听

所以改变这个:

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"

希望这有帮助!