iGoogle で動作するガジェットの開発に取り組んでいます。実際、私たちが追い詰める時間の悪夢を見ているという厄介なバグは別として、それは終了しました.
コード スニペットは CoffeeScript であることに注意してください。Google にホストする前に JS にコンパイルされます。コードには Backbone.js も使用していますが、Backbone 固有のコード (initialize
メソッドなど) はすべて問題なく動作するため、大きな違いはありません。バックボーン以外のコードの問題部分を切り分けることができました。
ガジェットは、優先オプションのリストを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()
、空のオブジェクトが返されます。Refresh が完了すると、ガジェットは同じ呼び出しを処理し、params を見つけて使用します。
どちらのビューでも、最後に実行されるコードは…</p>
gadgets.util.registerOnLoadHandler init
私たちの関数を呼び出すinit()
...</p>
init = ->
@params = gadgets.views.getParams()
…ページを更新しない限り、空のオブジェクトを返します。
なぜこれが起こっているのですか?私はgadgets.*
物事を適切に「キックスタート」していませんか?gadgets.*
ページを更新するまで、特定のガジェットに「バインド」されていないオブジェクトと話しているようなものです(その後、強制的にキャンバス ビューにバインドされます)。助けてください!