というライブラリを使用しており、インスタンスのコレクションを保持していRiotControl
ます。また、追加されたすべてのストアでいくつかのイベント リスナーを結び付けます。RiotControl
Store
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()
})
このイベントRiotControl
がStore
. 私が知る限り、RiotControl
はforEach
ループ内で、それが管理する各ストアに発生するイベントをディスパッチします。これがTodoStore
を観察できる理由self.on('todo_add')
です。self.trigger('todos_changed')
泡がどのように発生するRiotControl
のかわかりませんが、そこでも観察できます。誰でも何か考えがありますか?