Google Gadget画布视图无法与Gadget对话.视图或.params,直到刷新

Google Gadget canvas view unable to talk to gadgets.views or .params until refresh?

本文关键字:视图 Gadget params 对话 刷新 布视图 Google      更新时间:2023-09-26

我一直在开发一个可以在google中运行的小工具。事实上,它已经完成了,除了一个令人讨厌的bug,我们正在经历一场噩梦般的追捕时间。

请注意,代码片段是在CoffeeScript;在我们托管给Google之前,它被编译成JS。我们也使用Backbone.js的代码,但这应该没有太大的区别,因为我们所有的骨干特定的代码(initialize方法等)工作得很好;我已经能够将问题部分的代码隔离在我们的主干内容之外

该小工具将首选选项列表保存为Google的gadgets.prefs对象,作为一个管道分隔的字符串(55|34|101)。

prefs = new gadgets.Prefs()
prefs.set('paramname','55|34|101')

这个保存发生得很好,并且对get的任何后续调用都可以正常工作。它们甚至可以通过home视图中的prefs.get调用来读取。当从home视图切换到canvas视图时,小工具无法get这些首选项(从canvas视图)。

prefs = new gadgets.Prefs()
prefs.get('paramname')

只有当你对整个canvas视图页面进行刷新时,小工具才会检索那些首选选项。

现在得到这个:我们已经尝试将这些首选项作为homecanvas视图之间的参数传递。

(home view)
params = 
    'paramname': '55|34|101'
gadgets.views.requestNavigateTo('canvas', params)
(canvas view)
@params = gadgets.views.getParams()

这成功地将我们发送到canvas,但在将home切换到canvas并尝试与gadgets.views.getParams()交谈后,返回一个空对象。只有在刷新完成后,gadget才会处理相同的调用,查找参数并使用它们。

在两个视图中,运行的最后一段代码是…

gadgets.util.registerOnLoadHandler init

调用init()函数…

init = ->
    @params = gadgets.views.getParams()

…返回一个空对象,除非我们刷新页面。

知道为什么会这样吗?我没有"kickstart"gadgets.*的东西正确吗?这几乎就像我在与一个没有"绑定"到我的特定小工具的gadgets.*对象交谈,直到我刷新页面(然后强制它绑定到画布视图)。请帮助!

看起来,这是Google在home/canvas视图之间切换时使用的新AJAX加载技术的问题。我们联系了谷歌的iGoogle/OpenSocial团队,这就是我们得到的回应。他们能够用自己的小工具复制这种虫子。在他们解决这个问题之前,通过http://google.com/ig?aig=0访问iGoogle应该可以解决这个问题。