Javascript 在模型上使用JSON.stringify时,主干集合未包含在JSON字符串中

Javascript 在模型上使用JSON.stringify时,主干集合未包含在JSON字符串中,javascript,json,backbone.js,Javascript,Json,Backbone.js,我遇到了一个问题,模型中的集合属性(在本例中是参数集合)没有包含在JSON.stringify函数创建的JSON字符串中。为什么会发生这种情况?它基本上只是排除它,并将其余变量添加到JSON字符串中 活动内容如下: EventAggregator.on('toggleFacet', function (facets) { var facets = SearchOptionsUtil.getCheckedFacets(facets);

我遇到了一个问题,模型中的集合属性(在本例中是参数集合)没有包含在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对象上看到一个空的参数变量(之前已填充)。如果我没有显式创建SearchOptionsModel,为什么会在其中设置参数变量?这是因为参数默认设置为集合吗?

要将主干模型转换为JSON,必须使用
toJSON
方法:

model.toJSON();

检查这里的文档:

当点击
JSON.stringify
时,您是否检查了
参数是否正确?我想知道问题是否在于对
fetchCollections
的异步调用正在清除从“facets”中添加的内容。我查看了这些内容,并填充了parameters对象,我用解决方案更新了问题,尽管它确实引出了另一个问题..调用
JSON.stringify
将自动调用传递给它的对象上的
toJSON
(如果该方法存在)。