2013-06-12 73 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