Встроенный ответ робота Google wave robot
-
21-09-2019 - |
Вопрос
Недавно я работал над своим первым роботом для Google wave, жизненно важной частью того, что он делает, является вставка встроенных ответов во всплывающее окно.Я ни за что на свете не смогу понять, как это сделать!
В документах API есть функция Вставка lineblip что звучало многообещающе, однако призыв, который, похоже, ничего не дает!
Редактировать::Похоже, что это известная ошибка.Тем не менее, вопрос по-прежнему остается в силе, каков правильный способ вставить встроенную точку?Я предполагаю что-то вроде этого:
inline = blip.GetDocument().InsertInlineBlip(positionInText)
inline.GetDocument().SetText("some text")
Решение
Если вы посмотрите на исходный код для OpBasedDocument.InsertInlineBlip()
вы увидите следующее:
412 - def InsertInlineBlip(self, position):
413 """Inserts an inline blip into this blip at a specific position.
414
415 Args:
416 position: Position to insert the blip at.
417
418 Returns:
419 The JSON data of the blip that was created.
420 """
421 blip_data = self.__context.builder.DocumentInlineBlipInsert(
422 self._blip.waveId,
423 self._blip.waveletId,
424 self._blip.blipId,
425 position)
426 # TODO(davidbyttow): Add local blip element.
427 return self.__context.AddBlip(blip_data)
Я думаю, комментарий к TODO предполагает, что эта функция еще не активирована.Метод должен быть вызываемым и возвращать корректно, однако я подозреваю, что операция document не применяется к глобальному документу.
Синтаксис, который вы включили в свой пост, выглядит правильным.Как вы можете видеть выше, InsertInlineBlip()
возвращает значение из AddBlip()
, то есть ...дун, дун, дун...вспышка.
543 - def AddBlip(self, blip_data):
544 """Adds a transient blip based on the data supplied.
545
546 Args:
547 blip_data: JSON data describing this blip.
548
549 Returns:
550 An OpBasedBlip that may have operations applied to it.
551 """
552 blip = OpBasedBlip(blip_data, self)
553 self.blips[blip.GetId()] = blip
554 return blip
Редактировать:Интересно отметить , что сигнатура метода метода Insert InsertInlineBlip(self, position)
существенно отличается от метода вставки InsertElement(self, position, element)
. InsertInlineBlip()
не принимает параметр элемента для вставки.Похоже, текущая логика для InsertInlineBlip()
это больше похоже Blip.CreateChild()
, который возвращает новый дочерний элемент, с которым можно работать.Исходя из этого, мы можем заподозрить, что этот API будет меняться по мере добавления функциональности.
Другие советы
Это могло бы быть возможным ошибка.
Похоже, что ранее это была ошибка, однако сегодняшнее обновление, мы надеемся, исправило ее:http://code.google.com/p/google-wave-resources/wiki/WaveAPIsChangeLog