首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >本地存储崩溃模型定义?

本地存储崩溃模型定义?
EN

Stack Overflow用户
提问于 2013-06-13 02:58:24
回答 1查看 111关注 0票数 0

假设我们有以下结构:

model_Projects拥有一组model_Category。每个model_Category都拥有一个model_SubCategory数组。

实际上,我有一个带有localStorage代理的model_Projects存储。

发生的情况是,当我加载sync()和load()我的model_Projects存储时,在每个model_Projects中,我的model_Category数组是合适的大小,并且每个单元确实包含一个对象。

错误的是,这些对象中的每一个都不是model_Category对象...

下面是一个项目的console.log()函数

代码语言:javascript
复制
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()时得到的结果

如果我们打开错误,我们会看到下面的代码行崩溃:

代码语言:javascript
复制
console.log(arrCategory[i].get('strTitle') + '   Total : ' + arrCategory[i].get('numTotal') + '\n');

看起来arrCategoryi不再是一个类别模型了。wtf

会有人知道发生了什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-13 05:53:00

医生说:

LocalStorageProxy使用新的HTML5 localStorage应用编程接口在客户端浏览器上本地保存模型数据。HTML5 localStorage是一个键值存储(例如,不能保存像JSON这样的复杂对象),因此LocalStorageProxy在保存和检索数据时会自动序列化和反序列化数据。

假设你有一个模型对象:

代码语言:javascript
复制
var category = Ext.create('My.Category', { ... });

此对象将被序列化为JSON字符串,并保存在数据库中。但是JSON对象不能有函数,只有属性被转换成JSON。这就是为什么你会找回一个损坏的对象。

您可以使用以下示例代码来证明这一点:

代码语言:javascript
复制
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编码步骤,该函数就会丢失。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17073217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档