在模型上使用 JSON.stringify 时,主干集合不包含在 JSON 字符串中
Backbone Collection not being included in JSON string when using JSON.stringify on model
我遇到了一个问题,即我的模型中的集合属性(在本例中为参数集合)未包含在 JSON.stringify 函数创建的 JSON 字符串中。有什么理由会发生这种情况吗?它基本上只是排除它并将其余变量添加到 JSON 字符串中。
以下是事件:
EventAggregator.on('toggleFacet', function (facets) {
var facets = SearchOptionsUtil.getCheckedFacets(facets);
var sortOptions = SearchOptionsUtil.getSortOptions();
var searchOptions = new SearchOptionsModel();
for(var facet in facets){
var id = facet;
var value = facets[facet];
searchOptions.parameters.add(new ParameterModel({id: id, values: value.split(',')}));
}
var criteria = $.extend(facets, sortOptions);
location.hash = UriUtil.getUriHash(criteria);
RequestUtil.requestSearchResults(searchOptions);
});
这是获取:
requestSearchResults: function (searchOptions) {
//fetch the results
var performSearchModel = new PerformSearchModel();
var searchOptionsJson = JSON.stringify(searchOptions);
performSearchModel.fetch({
type: "POST",
contentType: "application/json; charset=utf-8",
dataType: "json",
data: JSON.stringify({searchOptionsJson: searchOptionsJson}),
success: function (response) {
console.log("Inside success");
console.log(response);
},
error: function (errorResponse) {
console.log("Inside Failure")
console.log(errorResponse.responseText)
}
}) //have to wait for the fetch to complete
.complete(function () {
//show our regions
App.facetsRegion.show(new FacetListView({collection: performSearchModel.facets}));
App.resultsRegion.show(new ResultListView({collection: performSearchModel.results}));
//perform search fetch complete
});
}
这是模型:
var SearchOptionsModel = Backbone.Model.extend({
defaults: {
parameters: ParameterCollection,
currentItemId: '{EE8AA76E-0A3E-437B-84D8-AD7FCBAF2928}',
sortBy: 0,
sortDirection: 'asc',
resultsPerPage: 10
},
initialize: function () {
this.parameters = new ParameterCollection();
//fetch calls an on change event.
this.on("change", this.fetchCollections);
},
url: function () {
return '/Services/Search/SearchService.asmx/SearchOptions';
},
parse: function (response) {
var data = JSON.parse(response.d);
return data;
},
fetchCollections: function () {
//when we call fetch for the model we want to fill its collections
this.parameters.set(
_(this.get("parameters")).map(function (parameter) {
return new ParameterModel(parameter);
})
);
}
});
更新**
因此,我更改了在 SearchOptionsModel 中创建和添加参数集合的方式,并且 JSON 对象的形成正确。我从这里更改了它:
var searchOptions = new SearchOptionsModel();
for(var facet in facets){
var id = facet;
var value = facets[facet];
searchOptions.parameters.add(new ParameterModel({id: id, values: value.split(',')}));
}
对此:
var parameters = new ParameterCollection();
//loop through all of the variables in this object
for(var facet in facets){
var id = facet;
var value = facets[facet];
parameters.add(new ParameterModel({id: id, values: value.split(',')}));
}
var searchOptions = new SearchOptionsModel({parameters: parameters});
现在参数在模型中的属性下填充,我在 searchOptions 对象上看到一个空参数变量(之前正在填充)。如果我没有显式创建参数变量,为什么在搜索选项模型中设置了参数变量?是因为参数默认设置为集合吗?
要将主干模型转换为 JSON,必须使用 toJSON
方法:
model.toJSON();
在此处查看文档: http://backbonejs.org/#Model-toJSON
相关文章:
- 使用System从C#集合创建JSON数组.网状物剧本序列化
- 主干 JSON 集合到模板输出
- 显示嵌套json集合的主干
- 主干从外部json填充集合
- 筛选 json 并创建主干模型和集合
- 主干.js:仅添加来自 JSON 集合获取的新模型
- 无法在主干集合中获取 JSON
- 分页 JSON 主干集合
- 无法将解析的 JSON 添加到主干集合
- 主干 - 从 json 填充集合并更新视图
- 主干.js从静态 JSON 呈现集合视图
- 在模型上使用 JSON.stringify 时,主干集合不包含在 JSON 字符串中
- 来自 URL json 的主干集合
- 我如何循环通过json集合的字符串与胡子
- 主干解析json集合
- 重新排序JSON集合
- 要在模板上获取的主干 JSON 集合
- 将变量传递到json集合中
- 我如何计算JSON集合中的所有欺骗值
- 嵌套表格/ (?)JSON集合,然后在服务器端访问它