2

というライブラリを使用しており、インスタンスのコレクションを保持していRiotControlます。また、追加されたすべてのストアでいくつかのイベント リスナーを結び付けます。RiotControlStore

https://github.com/jimsparkman/RiotControl/blob/master/demo/todo.tag#L31

var RiotControl = {
  _stores: [],
  addStore: function(store) {
    this._stores.push(store)
  }
}

['on','one','off','trigger'].forEach(function(api){
  RiotControl[api] = function() {
    var args = [].slice.call(arguments)
    this._stores.forEach(function(el){
      el[api].apply(null, args)
    })
  }
})

AStoreはそれ自体でイベントを監視して起動します。

https://github.com/jimsparkman/RiotControl/blob/master/demo/todostore.js#L21

function TodoStore() {
  ...
  self.on('todo_add', function(newTodo) {
    self.todos.push(newTodo) 
    self.trigger('todos_changed', self.todos)        
  })
}

上記の例では、ストアはtodos_changedそれ自体でイベントを発生させます。どういうわけか、このイベントはRiotControlオブジェクトでも観察できます。

https://github.com/jimsparkman/RiotControl/blob/master/demo/todo.tag#L31

// Register a listener for store change events.
RiotControl.on('todos_changed', function(items) {
  self.items = items
  self.update()
})

このイベントRiotControlStore. 私が知る限り、RiotControlforEachループ内で、それが管理する各ストアに発生するイベントをディスパッチします。これがTodoStoreを観察できる理由self.on('todo_add')です。self.trigger('todos_changed')泡がどのように発生するRiotControlのかわかりませんが、そこでも観察できます。誰でも何か考えがありますか?

4

1 に答える 1

0

このイベントは を介し​​てRiotControlselfに追加されたため、RiotControlで監視可能であり、 を介してトリガー可能です。RiotControl.addStore(todoStore)_storesapplysselfRiotControl

( https://github.com/jimsparkman/RiotControl/blob/master/demo/index.html#L31を参照)

于 2015-08-10T01:16:24.483 に答える