首页 > 解决方案 > 通过一次又一次单击“插入”按钮,Google 插入事件在 Google 日历中重复

问题描述

我使用了一个按钮来插入事件,但是当我再次单击按钮时,它再次插入并创建了事件的重复副本。有没有办法只插入最新事件。

{

      var request;

      for (var j = 0; j < this.state.syncEvent.length; j++) {

        console.log("J loop", this.state.syncEvent[j]);

        request = function (resource) {

          return gapi.client.calendar.events.insert({

            'calendarId': 'primary',

            'eventId': resource

          });

        }(this.state.syncEvent[j]);

        request.execute(function (resp: any) {

          console.log(resp);

        });

      }

    }

标签: google-calendar-api

解决方案


如果您要插入具有预定义事件 ID 的事件 - 首先检查具有此 ID 的事件是否已存在

首先,您的代码存在一些问题。

查看文档中的 Javasript 示例:

正确的语法是:

var request = gapi.client.calendar.events.insert({
  'calendarId': 'primary',
  'resource': event
});

whereevent是类型的事件资源

var event = {
  ...
  'start': {
    'dateTime': '2015-05-28T09:00:00-07:00',
    'timeZone': 'America/Los_Angeles'
  },
  'end': {
    'dateTime': '2015-05-28T17:00:00-07:00',
    'timeZone': 'America/Los_Angeles'
  },
  'id': SPECIFY_HERE_THE_EVENT_ID,
  ... 
};

事件资源必须包含Required Properties endstart,此外,您还需要指定方法文档中提到的其他属性,例如 summaryid

现在,由于可以从您的代码片段中推断出您将事件 id 传递给您的函数 - 在插入事件之前,您可以使用事件方法进行检查:获取具有给定 id 的事件已经存在。

或者,您也可以使用方法Events: list来检索日历中已经存在的事件。因此,您可以使用查询参数q进行过滤,例如summary,或者您可以通过指定参数timeMaxtimeMin- 进行查询,具体取决于您的用例。

您需要做的就是实现一个条件语句,仅当Events: getEvents: list不返回具有指定参数的现有事件时才创建新事件。


推荐阅读