我正在使用一个名为 的库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
形成的,因此在那里也可以观察到。有人知道吗?