0

我一直在研究一个可以在 iGoogle 中运行的小工具。事实上,它已经完成了,除了一个令人讨厌的错误,我们正在做一场梦魇般的时间追捕。

请注意,代码片段在 CoffeeScript 中;在我们为 Google 托管之前,它已编译为 JS。我们还在代码中使用 Backbone.js,但这应该不会有太大区别,因为我们所有的 Backbone 特定代码(initialize方法等)都可以正常工作;我已经能够在我们的 Backbone 东西之外隔离代码的问题部分

gadgets.prefs该小工具以竖线分隔的字符串 ( 55|34|101)的形式保存 Google 对象的首选选项列表。

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

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

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

只有在整个canvas视图页面上进行刷新后,小工具才会检索这些首选选项。

现在得到这个:我们也尝试将这些首选项作为参数传递home给视图和canvas视图。

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

(canvas view)
@params = gadgets.views.getParams()

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

在这两个视图中,运行的最后一段代码是……</p>

gadgets.util.registerOnLoadHandler init

它调用了我们的init()函数……</p>

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

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

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

4

1 回答 1

0

As it seems, it's an issue with Google's new AJAX loading technology used in switching between home/canvas views. We contacted Google's iGoogle/OpenSocial team and that's the response we got. They were able to reproduce the bug with a gadget of their own. Until they fix it, accessing iGoogle with http://google.com/ig?aig=0 should band-aid the issue.

于 2011-08-12T14:46:52.390 回答