Sencha Touch で iPhoneアプリを作ろう! その後1

  • 投稿:
  • 更新:2014年6月10日
  • by
  • in

これもう填りどころ満載です(笑)
なかでも最大級にはまったのはローカルストレージ絡み
折角の 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 からはオケ)
誰かこのあたりの情報もあったらおせーて!
<これ解決です!>

あー寝不足は続く
こんなのに手出すんじゃなかった状態(笑)