我一直在研究一个可以在 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
,但在切换home
到canvas
并尝试与之交谈后gadgets.views.getParams()
,返回一个空对象。只有完成刷新后,小工具才会处理相同的调用、查找参数并使用它们。
在这两个视图中,运行的最后一段代码是……</p>
gadgets.util.registerOnLoadHandler init
它调用了我们的init()
函数……</p>
init = ->
@params = gadgets.views.getParams()
…它返回一个空对象,除非我们刷新页面。
知道为什么会这样吗?我没有gadgets.*
正确地“启动”这些东西吗?这几乎就像我正在与一个gadgets.*
没有“绑定”到我的特定小工具的对象交谈,直到我刷新页面(然后强制它绑定到画布视图)。请帮忙!