有什么方法可以启动复合操作以响应另一个复合操作中的事件吗?
Is there any way to start a compound operation in response to an event in another compound operation?
在下面的代码中,一个项目被添加到复合操作中的协作列表中。在列表中的 VALUES_ADDED 事件处理程序中,启动了另一个复合操作。当我 运行 代码时,我收到以下错误消息:Exception: Uncaught Error: gapi.drive.realtime.Error: {type: invalid_compound_operation, message: "Already committed this local change.", isFatal: true}
这似乎并不少见,并且在我的应用程序中自然而然地出现了,尽管以更复杂的方式出现,所以我不能只是将 map 赋值移动到原始复合操作中。我在实时 api 指南或参考文档中也找不到任何关于此类限制的参考。有什么方法可以在复合操作结束上方的调用堆栈中开始新的复合操作?
var va = function(event) {
doc.getModel().beginCompoundOperation('b');
doc.getModel().getRoot().get('map').set('key', 'value');
doc.getModel().endCompoundOperation();
};
doc.getModel().getRoot().get('list').addEventListener(gapi.drive.realtime.EventType.VALUES_ADDED, va);
doc.getModel().beginCompoundOperation('a');
doc.getModel().getRoot().get('list').push(100);
doc.getModel().endCompoundOperation();
一般来说,您不应该在事件侦听器中写入实时模型。这样做会导致不必要的写入。例如,在您的代码中,文档中的每个协作者都会在列表被修改时写信,这可能不是您想要的。在多个客户端之间无意中创建写周期也很容易。
我们没有任何取消此限制的计划,但我会询问我们的文档团队,看看他们是否可以添加更好的解释。
一般来说,我们的客户在将写入移动到原始复合操作时没有遇到任何问题 - 您能否向我提供更多详细信息,说明为什么这对您的应用程序不切实际?
谢谢,
布莱恩
在下面的代码中,一个项目被添加到复合操作中的协作列表中。在列表中的 VALUES_ADDED 事件处理程序中,启动了另一个复合操作。当我 运行 代码时,我收到以下错误消息:Exception: Uncaught Error: gapi.drive.realtime.Error: {type: invalid_compound_operation, message: "Already committed this local change.", isFatal: true}
这似乎并不少见,并且在我的应用程序中自然而然地出现了,尽管以更复杂的方式出现,所以我不能只是将 map 赋值移动到原始复合操作中。我在实时 api 指南或参考文档中也找不到任何关于此类限制的参考。有什么方法可以在复合操作结束上方的调用堆栈中开始新的复合操作?
var va = function(event) {
doc.getModel().beginCompoundOperation('b');
doc.getModel().getRoot().get('map').set('key', 'value');
doc.getModel().endCompoundOperation();
};
doc.getModel().getRoot().get('list').addEventListener(gapi.drive.realtime.EventType.VALUES_ADDED, va);
doc.getModel().beginCompoundOperation('a');
doc.getModel().getRoot().get('list').push(100);
doc.getModel().endCompoundOperation();
一般来说,您不应该在事件侦听器中写入实时模型。这样做会导致不必要的写入。例如,在您的代码中,文档中的每个协作者都会在列表被修改时写信,这可能不是您想要的。在多个客户端之间无意中创建写周期也很容易。
我们没有任何取消此限制的计划,但我会询问我们的文档团队,看看他们是否可以添加更好的解释。
一般来说,我们的客户在将写入移动到原始复合操作时没有遇到任何问题 - 您能否向我提供更多详细信息,说明为什么这对您的应用程序不切实际?
谢谢, 布莱恩