2011-01-25 10 views
1

私はSencha TouchアプリケーションでlocalStorageの要素を持つストアを構築しようとしています。Sencha Touchの店舗でlocalStorageを使用する

私はからデータを取得したいのlocalStorageはのlocalStorage [「フィード」]で、次のようになります。

"[{"title":"Title 1","url":"http://stackoverflow.com"}, 
    {"title":"Title2","url":"http://google.com"}]" 

私は次のように店にそれを取得しようとしている:

var feedsPanel; 
var store; 
Ext.setup({ 
icon: 'icon.png', 
glossOnIcon: false, 
onReady: function(){ 
    Ext.regModel("feedModel", { 
     fields: [ 
      { name: "title", type: "string" }, 
      {name: "url", type:"string"} 
     ] 
    }); 
    store = new Ext.data.Store({ 
      proxy: new Ext.data.LocalStorageProxy({ 
       id: 'feeds' 
      }), 
      model:"feedModel" 
    }); 

私がChromeでstore.load()を試してみると、これはTypeErrorのため失敗します。nullのプロパティ 'title'を読み取ることができません。

どのように私はこのlocalStorageからすべてのタイトルとすべてのURLにアクセスする必要がありますか?

ソリティアゲームの例を見ると、めまいがあります。

残りのSenchaアプリケーションは現在のところこのストアに依存せず、完全にロードされます。 Chromeにコンソールがある店舗内のアイテムがあるかどうかを確認します。

答えて

1

このlocalStorage形式は、Sencha's Storesに固有のものではありません。しかし、あなたが本当にそのようにフォーマットされたlocalStorageから読む必要があるなら、あなたは次のことを試みるかもしれません。それは可能です:-)

// first prefill localStorage 
var feeds = [], j = 0; 
while (j < 25) { 
    feeds.push({'title': 'Title ' + ++j, url: 'http://link' + j + '.com'}); 
} 
localStorage.setItem('feeds', Ext.encode(feeds)); 

// Sencha Touch v1 Application 
new Ext.Application({ 
    name: 'App', 

    launch: function() { 
     var store = new Ext.data.JsonStore({ 
      id: 'feedstore', 
      fields: ['title', 'url'], 
      autoload: true, 
      proxy: { 
       id: 'feedproxy', 
       type: 'memory', 
       url: 'feeds', 
       create: function() { 
        console.log('feed: CREATE'); 
       }, 
       read: function (operation, callback, scope) { 
        console.log('feed: READ'); 

        var data = localStorage.getItem(this.url), 
         i, len, records = []; 

        console.log('data: ' + data); 
        data = Ext.decode(data); 

        if (Ext.isArray(data)) { 
         len = data.length; 
         for (i = 0; i < len; ++i) { 
          records.push(new this.model(data[i])); 
         }; 

         // return model instances in a result set 
         operation.resultSet = new Ext.data.ResultSet({ 
          records: records, 
          total : len, 
          loaded : true 
         }); 

         // announce success 
         operation.setSuccessful(); 
         operation.setCompleted(); 

         // finish with callback 
         if (typeof callback == "function") { 
          callback.call(scope || this, operation); 
         } 
         Ext.getBody().unmask(); 
        } 
       }, 
       update: function() { 
        console.log('feed: UPDATE'); 
       }, 
       destroy: function() { 
        console.log('feed: DESTROY'); 
       }, 
       reader: { 
        type: 'json' 
       } 
      } 
     }).load(); 

     this.viewport = new Ext.Panel({ 
      fullscreen: true, 
      layout: 'card', 
      items: [{ 
       xtype: 'list', 
       itemTpl : '{title}<br />{url}', 
       store: store 
      }] 
     }); 
    } 
}); 
1

ローカルストレージには、すでにモデル 'スキーマ'が異なるエントリがありますか?ちょっと考えてみてください。別のプロキシIDを試してみてください。

また、店舗を直接登録するよりも、店舗を登録する方が良いと思います。試してみてください:

リストで
Ext.regStore('store', { 
    proxy: {...} 
    ... 
); 

その後

store:'store' 

またはそれに何でもと結合します。

+0

私はちょうどそれが使用していたスキームを理解していません。 Sencha Touchとは無関係のスクリプトでlocalStorageにストリング化されたリスト内のすべての関連配列にアクセスできると思っていましたが、それは可能ではないようです。 – andersem

関連する問題