我正在尝试减少附加到我的协作模型的事件侦听器的数量。为了做到这一点,我已经开始监听 ObjectChanged 事件而不是特定的事件类型,并委托给其他处理程序。但是,对于 CollaborativeLists 上的 ValuesAdded/ValuesRemoved 更改,ObjectChanged 事件似乎没有正确冒泡。
function onObjectChanged(e)
{
log('Changed: ', e);
}
// Placeholder, called when we load our doc through the realtime api.
function onDocLoaded(doc)
{
var docModel = doc.getModel();
var docRoot = docModel.getRoot();
console.log('Drive document loaded: ', window.performance.now());
if (docRoot.has('testMap'))
{
docRoot.delete('testMap');
}
docRoot.set('testMap', docModel.createMap());
var testMap = docRoot.get('testMap');
console.assert(testMap, 'Test map required');
docRoot.addEventListener(gapi.drive.realtime.EventType.OBJECT_CHANGED, onObjectChanged);
var testList = docModel.createList();
testMap.set('testList', testList);
console.assert(testList, 'Test list required');
setTimeout(function ()
{
console.log('Begin Push');
testList.push('This is a test string');
console.log('End Push');
}, 1000);
}
上面的代码在 doc load 上运行并演示了问题。在这种情况下,我希望触发两个 ObjectChanged 事件(第一个用于在地图上设置的列表,第二个用于将字符串推送到列表中)。第一个事件正确触发,但是列表推送不会在“docRoot”或“testMap”上触发 ObjectChanged 事件。由于这两个都是 testList 的祖先,因此应该将事件冒泡给它们(基于https://developers.google.com/drive/realtime/handle-events#event_bubbling)。
然而,在 testList 上触发了 ObjectChanged 事件,因此看起来只有冒泡部分存在问题。
有没有办法确保事件冒泡会发生?此外,对于正在冒泡的事件,有没有办法在中途停止冒泡?