0

假设我们有以下结构:

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

我实际上有一个 model_Projects 商店,它有一个 localStorage 代理。

发生的情况是,当我加载 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');

似乎 arrCategory[i] 不再是类别模型... wtf

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

4

1 回答 1

1

医生说:

LocalStorageProxy 使用新的 HTML5 localStorage API 在客户端浏览器本地保存模型数据。HTML5 localStorage 是key-value 存储(例如不能保存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 编码步骤,该功能就会丢失。

于 2013-06-12T21:53:00.140 回答