これもう填りどころ満載です(笑)
なかでも最大級にはまったのはローカルストレージ絡み
折角の HTML5 なんだし Javascript でクッキー使わずに色んな情報をローカルへ保存するプログラムを書いていたのですが、なんとか利用方法は分かったものの、どうやらフレームワーク側にバグあるらしくて、ちっとも挙動が安定しないのよこれが…
どうも、「Ext.data.Store」でデータ処理後に「sync」しても実際のストレージへ上手く更新されないようで、「Ext.data.LocalStorageProxy」を直接いじって更新するしかないらしい…
てーことで、以下のようなサブクラスを定義してみますた
↓
// Ext.data.Store の拡張クラス Ext.data.StoreEx = Ext.extend(Ext.data.Store, { // 行の削除 del: function(idx) { var ids = (this.getProxy()).getIds(); this.removeAt(idx); if (ids.length> idx) { // 直接ローカルストレージの行を削除 (this.getProxy()).removeRecord(ids[idx]); } }, // 行の書き換え modify: function(idx, data) { var ids = (this.getProxy()).getIds(); var rec = this.getAt(idx); rec.data = data; if (ids.length> idx) { // 直接ローカルストレージの行を更新 (this.getProxy()).setRecord(rec,ids[idx]); } } });
これで
// 削除のばあい(ixd=データ配列の番号0~) myStore.del(idx); myStore.save(); ・ ・ // 更新のばあい(ixd=データ配列の番号0~、obj=更新レコード) myStore.modify(idx, obj); myStore.save();
こんな風に使うとローカルストレージとマッチさせることができました
これで正しいかどうかはイマイチ不明ですが、正しく動いてはいる
誰かもっと良いやり方あればおせーて!
と、これだけ頑張って解析したローカルストレージ絡みですが <これ解決です!>
残念なことに…
iPhone からスタンドアローンモード(ホーム画面に追加したアイコンから起動)の場合、どうやらローカルストレージは使えないような…
スタンドアローンだと、そもそもドメインが意識できないのでローカルストレージが利用できないんじゃないかと…
つか、実際保存されてないし…(iPhone Safari からはオケ)
誰かこのあたりの情報もあったらおせーて!
あー寝不足は続く
こんなのに手出すんじゃなかった状態(笑)
Comments