0

モデルのコレクション プロパティ (この場合は Parameters コレクション) が、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 にパラメーター変数が設定されているのはなぜですか? パラメータのデフォルトがコレクションに設定されているためですか?

4

1 に答える 1