2

基本的に、私はバックボーンが初めてです。私の見解では、コレクション内の「制限」という属性を変更しています。次に、イベントをトリガーして (属性が変更されたときに)、イベントをリッスンして他のアクションを実行できるようにします。

ただし、何かが変更されたときにコレクションからイベントをトリガーし、その変更が発生したときにその変更をリッスンすることはできません。ビューとコレクションが互いに通信することと関係があると思います..どんな助けでも大歓迎です! ありがとう

イベントをトリガーするコード (私のコレクション内) は次のとおりです。

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

1 に答える 1

3

変更を行った後、その変更をリッスンするために登録します

属性の変更 -> トリガー イベント -> 誰もリッスンしない -> リッスンするように登録

したがって、これを変更します。

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"

お役に立てれば!

于 2012-08-16T11:30:48.963 に答える