2013-06-12 112 views
0

假設我們有以下結構:本地存儲崩潰模型定義?

model_Projects擁有一個model_Category數組。 每個model_Category都擁有一個model_SubCategory數組。

我實際上有一個model_Projects的商店,它有一個localStorage代理。

發生的情況是,當我加載同步()和加載()我的model_Projects存儲時,在每個model_Projects中,我的model_Category數組的大小合適,並且每個單元格都包含一個對象。

什麼是錯的是,每個這些對象都沒有一個model_Category對象...

這裏是我的console.log()的一個項目

console.log('\n' + this.get('strTitle') + ' - ' + this.get('strType')); 
console.log(this.get('strVersion')); 
console.log('Event will be on : ' + this.get('dateOfProject') + '\n'); 


var arrCategory = this.get('arrCategory'); 
var arrSub; 
var arrType; 

for(i in arrCategory) 
{ 
    console.log(arrCategory[i].get('strTitle') + ' Total : ' + arrCategory[i].get('numTotal') + '\n'); 

    //Each Sub Category 
    arrSub = arrCategory[i].get('arrSubCategory'); 
    for(j in arrSub) 
    { 

     if(arrCategory[i].get('arrSubTotal') === undefined) 
     console.log('\t' + arrSub[j].get('strTitle')); 
     else 
     console.log('\t' + arrSub[j].get('strTitle') + '\t SubTotal : ' + arrCategory[i].get('arrSubTotal')[j]); 

     arrType = arrSub[j].get('arrType'); 
     arrValue = arrSub[j].get('arrValue'); 
     arrCOFactor = arrSub[j].get('arrCOFactor'); 
     for(var k=0; k<arrType.length; k++) 
     { 
      if(arrValue === undefined) 
      console.log('\t\t' + arrType[k] + '\t\t Value : ' + 'NA' + '\t\t COFactor : ' + arrCOFactor[k]); 
      else 
      console.log('\t\t' + arrType[k] + '\t\t Value : ' + arrValue[k] + '\t\t COFactor : ' + arrCOFactor[k]); 

     } 
     console.log(''); 
    } 
} 

console.log('\n'+this.get('strTitle') + ' - ' + this.get('strType') + '\n'); 

下面的函數是一個project.show ()在創建後立即從項目商店中讀取。

Created

這裏是我所得到的,當我project.show()後加載項目店

after-load

如果我們打開錯誤,我們得到以下行崩潰:

console.log(arrCategory[i].get('strTitle') + ' Total : ' + arrCategory[i].get('numTotal') + '\n'); 

看起來像arrCategory [i]不再是類別模型... wtf

會有人知道發生了什麼事嗎?

回答

1

的醫生說:

的LocalStorageProxy使用新的HTML5 localStorage的API保存到本地客戶端瀏覽器上的模型數據。 HTML5 localStorage是一個鍵值存儲(例如無法保存JSON等複雜對象),因此LocalStorageProxy在保存和檢索數據時會自動序列化和反序列化數據。

比方說,你有一個模型對象:

var category = Ext.create('My.Category', { ... }); 

這個對象將被序列化到數據庫被持久化JSON字符串。但是JSON對象不能有函數,只有屬性被轉換爲JSON。這就是爲什麼你找回一個破碎的物體。

您可以使用此示例代碼來證明給自己:

var o = {foo: 'bar', fn: function() {console.log('Hey!')}}; 
console.log(o); // => Object {foo: "bar", fn: function} 

var json = Ext.encode(o); 
console.log(json); // => {"foo":"bar","fn":null} 

var o2 = Ext.decode(json); 
console.log(o2); // => Object {foo: "bar", fn: null} 

注意,功能就被丟失的JSON編碼步驟。

+0

omg所以我的系統註定了...... – Fawar

+0

代理應負責維護僅模型數據,並從存儲中的數據恢復模型對象。您遇到問題是因爲您在記錄(項目)的** data **中保留了一些模型對象(類別)。您應該配置['HasMany'](http://docs.sencha.com/touch/2.2.1/#!/api/Ext.data.association.HasMany)關聯,而不是將原始對象放在那裏。做好準備,第一次有點困難...... – rixo

+0

有多少人能幫助我? – Fawar