我使用setItem将json字符串保存到本地存储,然后使用getItem将其恢复。这是有效的,但是当通过ajax加载相同的json字符串时,对象变得不同了。
以下是google-chrome browserconsole中的原始对象:
collection_parameter: Object
->OFFLINE: Array s
->_byId: Object
->models: Array[500]
..
这是 stringified json (getItem,setItem)local-storage:
{"OFFLINE":[{ "data_type":"OFFLINE",
"Number":"1",
"val_param_1_2_3":0 },
{..},
{..} ]
}
当我将上述json-string保存在文件中时,例如调用Test.json并通过ajax加载它,对象就不再相同了。
此处 ajax 致电:
$.ajax({ //Laden
url: 'Test.json',
method: 'GET',
dataType: 'json',
success: function(recieved_json_parameters) {
collections_parameter=recieved_json_parameters;
}//end success
});//end ajax
google-chrome中的新对象 collection_parameter现在是:
collection_parameter: Object
->OFFLINE: Array [500]
缺少其他节点。如何获得与上面完全相同的对象类型?
UPDATE1:这就是我创建原始json的方式:
var collections_parameter = { OFFLINE: Backbone.Collection.extend() }
collections_parameter.OFFLINE = new collections_parameter.OFFLINE(json);
答案 0 :(得分:1)
为了存储Backbone Collection
,您应该保存集合所具有的原始数据,您可以使用toJSON()
获取:(返回的值是对象数组)
collection.toJSON() /* store the object returned by this function */
(在您的情况下,我认为该集合是collection_parameter.OFFLINE
)
检索表示数据的JSON后,创建一个使用它初始化的新Backbone Collection
:
collection = new MyCollection(json)
其中MyCollection是您正在使用的Backbone.Collection
的子类,或Backbone.Collection
本身,json
是您检索的对象。
原因是您需要存储Collection
表示的实际数据。 Collection
对象本身为您提供了访问和更改基础数据的功能,但它不是数据本身,因此不应该对其进行序列化和存储。检索原始数据后,您将创建一个新的Collection
,它将为您提供访问数据的各种功能。