我已尝试按照 Build a Collaborative Data Model 中描述的步骤进行操作我最终得到以下代码:
function onLoad(doc){
var Book = function(){};
var model = doc.getModel();
gapi.drive.realtime.custom.registerType(Book, 'Book');
Book.prototype.title = gapi.drive.realtime.custom.collaborativeField('title');
Book.prototype.author = gapi.drive.realtime.custom.collaborativeField('author');
Book.prototype.isbn = gapi.drive.realtime.custom.collaborativeField('isbn');
Book.prototype.isCheckedOut = gapi.drive.realtime.custom.collaborativeField('isCheckedOut');
Book.prototype.reviews = gapi.drive.realtime.custom.collaborativeField('reviews');
var book = model.create('Book');
model.getRoot().set('book', book);
book.addEventListener(gapi.drive.realtime.EventType.OBJECT_CHANGED, function(e){console.log(e);});
book.title = 'Moby Dick';
book.author = 'Melville, Herman';
book.isbn = '978-1470178192';
book.isCheckedOut = false;
}
不幸的是,执行此操作时,在执行 var book = model.create('Book');
时出现以下错误:
Uncaught java.lang.IllegalArgumentException: Unknown type name Book
Drive Realtime API Error: invalid_compound_operation: Open compound operation at end of synchronous block - did you forget to call endCompoundOperation()?
我错过了什么?
最佳答案
您需要在加载文档之前注册自定义类型。
这里有您想要的三个不同部分:
- 加载之前:注册自定义类型。
- 在初始化时:每个文档只发生一次。在这里,您想要初始化每个文档都应具有的数据模型。
- 文件加载时:每次加载都会发生一次。这是您要设置事件监听器等的地方。
将您的函数分成这三个部分,它应该可以工作。
关于google-drive-api - 如何通过 Realtime API 构建和使用协作数据模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16178447/