2011-01-25 73 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屬性的'標題'。

我該如何訪問這個localStorage的每個標題和每個url?

看看紙牌遊戲的例子只是讓我頭暈。

我的Sencha應用程序的其餘部分不依賴於此存儲,並且完全加載。我使用Chrome瀏覽器檢查商店中是否有商品。

回答

1

這種localStorage格式並非特定於Sencha的商店。但是,如果您真的需要以這種方式格式化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 2011-01-31 23:24:11

相關問題