假设我们有以下结构:
model_Projects拥有一组model_Category。每个model_Category都拥有一个model_SubCategory数组。
实际上,我有一个带有localStorage代理的model_Projects存储。
发生的情况是,当我加载sync()和load()我的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(),从项目存储中读取。

以下是我在加载项目存储后执行project.show()时得到的结果

如果我们打开错误,我们会看到下面的代码行崩溃:
console.log(arrCategory[i].get('strTitle') + ' Total : ' + arrCategory[i].get('numTotal') + '\n');看起来arrCategoryi不再是一个类别模型了。wtf
会有人知道发生了什么吗?
发布于 2013-06-13 05:53:00
医生说:
LocalStorageProxy使用新的HTML5 localStorage应用编程接口在客户端浏览器上本地保存模型数据。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编码步骤,该函数就会丢失。
https://stackoverflow.com/questions/17073217
复制相似问题