【问题标题】:How to build and use a collaborative data model with Realtime API?如何使用 Realtime API 构建和使用协作数据模型?
【发布时间】:2013-04-23 20:19:49
【问题描述】:

我尝试按照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'); 时,我收到以下错误:

未捕获的 java.lang.IllegalArgumentException:未知类型名称 Book

Drive Realtime API 错误:invalid_compound_operation:在同步块末尾打开复合操作 - 您是否忘记调用 endCompoundOperation()?

我错过了什么?

【问题讨论】:

    标签: google-drive-api google-drive-realtime-api


    【解决方案1】:

    您需要在加载文档之前注册自定义类型。

    这里有三个不同的部分:

    • 加载之前:注册自定义类型。
    • 在初始化时:每个文档只发生一次。在这里,您要初始化每个文档应具有的数据模型。
    • 在文件加载时:每次加载都会发生一次。这是您要设置事件侦听器等的地方。

    将你的函数分成这三个部分,它应该可以工作。

    【讨论】:

    • 谢谢。我已经阅读了文档,但我没有注意。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多