假设我们有以下结构:
model_Projects拥有一个model_Category数组。 每个model_Category都拥有一个model_SubCategory数组。
我实际上有一个model_Projects商店,它有一个localStorage Proxy。
当我在每个model_Projects中加载sync()和load()我的model_Projects存储时,我的数组是一个好的大小,每个单元格都包含一个对象。
错误的是每个对象都不是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(),在创建之后,从项目商店中读取。
这是我在加载项目商店
后的project.show()时得到的结果
如果我们打开错误,我们会收到以下行崩溃:
console.log(arrCategory[i].get('strTitle') + ' Total : ' + arrCategory[i].get('numTotal') + '\n');
似乎arrCategory [i]不再是类别模型了...... wtf
有人知道发生了什么事吗?
答案 0 :(得分:1)
医生说:
LocalStorageProxy使用新的HTML5 localStorage API在客户端浏览器上本地保存Model数据。 HTML5 localStorage是一个键值存储(例如,无法保存像JSON这样的复杂对象),因此LocalStorageProxy在保存和检索数据时会自动对数据进行序列化和反序列化。
假设你有一个模型对象:
var category = Ext.create('My.Category', { ... });
此对象将序列化为要在db中保留的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编码步骤,该函数就会丢失。