如何最好地在谷歌实时模型中存储一个数字,并获得原子变化事件?

时间:2015-06-04 22:01:36

标签: google-drive-realtime-api

听起来很简单,但是......

此数字包含枚举类型,并且应该是自定义实时对象中的字段。这是自定义对象注册例程中的声明:

MyRTObjectType.prototype.myEnumeratedType =
    gapi.drive.realtime.custom.collaborativeField('myEnumeratedType');

我可以将它作为简单的javascript编号存储在模型中,并将其初始化为:

function initializeMyRTObjectType() {
    // other fields here
    this.myEnumeratedType = 0;
}

...但当然,以下内容不起作用,因为它只是一个数字:

myRTObject.myEnumeratedType.addEventListener(
    gapi.drive.realtime.EventType.OBJECT_CHANGED, self.onTypeChanged);

我可以将事件监听器添加到整个对象:

myRTObject.addEventListener(
    gapi.drive.realtime.EventType.OBJECT_CHANGED, self.onTypeChanged);

但我只对这个数字的更改感兴趣(如果我 对其他更改感兴趣,我不想检查每个字段以查看更改的内容。)

所以假设我将它存储为实时字符串,将其初始化为:

function initializeMyRTObjectType() {
    var model = gapi.drive.realtime.custom.getModel(this);
    // other fields here
    this.myEnumeratedType = model.createString();
}

现在我会得到我的改变事件,但它们不一定是原子的,我不知道改变,从“100”到“1001”,只是改变到了“101” ,所以我是否应该对此做出反应(这个确切的例子可能无效,但想法就在那里......)

所以问题是,是否有一种方法可以知道所有(复合?)更改,插入/删除在字符串字段上是完整的,或者(更好)一种不同的推荐方式来存储数字,并获得原子通知什么时候改变了?

1 个答案:

答案 0 :(得分:2)

您还会在包含对象上获得VALUE_CHANGED事件,就像您对地图一样:

myRTObject.addEventListener(gapi.drive.realtime.EventType.VALUE_CHANGED,
  function(event) {
    if (event.property === 'myEnumeratedType') {
      // business logic
    }
  });