本地撤消何时可以导致空重做堆栈?

时间:2015-11-24 21:37:52

标签: google-drive-realtime-api

我已经尝试了几个小时来重新创建我在比我的应用程序更简单的环境中遇到的问题,但没有成功,所以希望以下描述就足够了。

  1. 一位合作者(我),这种情况发生在线和内存模式。
  2. 开始复合操作。
  3. 某些处理恰好选择将哪些简单操作放入复合操作中。有许多嵌套函数调用,但AFAIK它们都在一个同步执行块中,并且我没有在同步块结束时获得" Open复合操作"异常。
  4. 完成了所选的简单操作。
  5. 结束复合操作。
  6. 从终端调用model.undo(),我的应用程序按预期运行。
  7. 但是现在model.canRedo为false,因此model.redo()会引用一个错误,引用空重做堆栈。
  8. 我尝试了除(3)之外的相同API调用序列,在我的应用程序之外的脚本中,一切正常(即在(7),model.canRedo为true,而model.redo()具有预期结果)。我唯一的另一个线索是,当我在我的应用程序中执行步骤时,(6)导致Model的serverRevision和serverVersion增加2,而在我的应用程序外的脚本中,撤消导致这些字段增加1

    使用Realtime调试器显示组成我的复合op的4个编辑操作,它们插入如下内容:

    { // new CollaborativeMap
        'ch': [] // new CollaborativeList
        'nch': {}  // new CollaborativeMap
        'nodetype': 'Outline'
    }
    

    到索引2处的现有CollaborativeList。调试器显示4个编辑事件:

    {nodetype: "Outline", ch: [], nch: {}} was added at index 2.
    nch has changed from null to {}.
    ch has changed from null to [].
    nodetype has changed from null to Outline.
    

    然后我撤消,调试器(有点令人困惑)只显示这个1编辑事件:

    {} was removed at index 2.
    

    我猜是否有编辑事件从地图中删除未显示的值?无论如何,问题是在撤消操作之后,重做堆栈是空的。

0 个答案:

没有答案