恐怖!ガジェットでUserPrefのEnumが効かない怪奇現象
Google Siteにいくら設定して保存しても何も変わらないもう一度設定を見ると default_value に戻ってるという怪奇現象にハマった。
試行錯誤で何とか解決したので謎のノウハウとしてメモ。
まず、以下のUserPrefのセットだと、enumをいくら変更しても 2にされてしまう。
<UserPref name="v1" default_value=""/> <UserPref name="v2" data_type="hidden" /> <UserPref name="v3" datatype="enum" default_value="2"> <EnumValue value="1" display_value="1"/> <EnumValue value="2" display_value="2"/> <EnumValue value="3" display_value="3"/> </UsaerPref>
なんと hiddenより後ろにあると無視されてしまうらしい。
以下にするとちゃんと保存されるようになる。
<UserPref name="v1" default_value=""/> <UserPref name="v3" datatype="enum" default_value="2"> <EnumValue value="1" display_value="1"/> <EnumValue value="2" display_value="2"/> <EnumValue value="3" display_value="3"/> </UsaerPref> <UserPref name="v2" data_type="hidden" />
なんのこっちゃ! hiddenは最後に置きましょう。
もしかすると Google Siteだけの問題かもしれない。なんでかってゆーと、そもそも
setprefsが効かない
という恐るべき仕様っぽいから。なんやそらー。
実際hiddenの項目を用意してsetprefsしても保存されない!保存した風な顔してリロードしてみると保存されてないってゆー状態。サイトは利用者に紐付くのではなくページに紐付くためなのかもね。
でもそんな特殊な仕様、どこにも見当たらないんだけどっ!
だから「hiddenなんてオレしらねー。」って感じでXML内の定義も読むの途中から放棄して、それ以降に存在するhiddenじゃないものまでシカトこいてるんじゃないかしら。
まあ、そんなわけだからSiteに置く専用のガジェットなら、そもそもhiddenなんて定義する意味ないってコトですわね。とほほーい。