3

我正在尝试减少附加到我的协作模型的事件侦听器的数量。为了做到这一点,我已经开始监听 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 事件,因此看起来只有冒泡部分存在问题。

有没有办法确保事件冒泡会发生?此外,对于正在冒泡的事件,有没有办法在中途停止冒泡?

4

0 回答 0