DevExtreme / Knockout.js将JSON实现为数据源

时间:2017-03-03 09:41:36

标签: javascript json rest knockout.js devextreme

我是JavaScript和REST的新手,我需要使用knockout.js将JSON作为数据源实现到devextreme。

我的问题是,我可以获取json,但它没有添加到数据源中。我使用console.log()进行测试,并注意到json已正确加载,但数据源为空(请参阅下面的代码中的注释)。如何实现json作为数据源的使用?

注意:我使用DevExtreme load JSON as datasource using knockout作为获取JSON内容的基础。

我有一个示例JSON-File,如下所示:

{
    "ID":"3",
    "content":
    {
        "ProdId":"000176491264",
        "ProdDesc":"Sample 1",
        "Type":"A",
    }
}

我当前的viewmodel看起来像这样:

MyApp.overview = function (params) {
    "use strict";

    var getData = function () {
        var deferred = $.Deferred();
        var xmlhttp = new XMLHttpRequest(), json;
        xmlhttp.onreadystatechange = function() {
            if(xmlhttp.readyState === 4 && xmlhttp.status === 200) {
                json = JSON.parse(xmlhttp.responseText);
                // prints needed content:
                console.log(json.content);
                deferred.resolve(json.content);
            }
         };              

        xmlhttp.open('GET', 'http://localhost:56253/test/3?format=json', true);
        xmlhttp.send();

        return deferred.promise();
    };

    var viewModel = {
        overviewDatagridOptions: {

            dataSource: getData(),

            selection: {
            mode: "single"
            },

            columns: [{
                dataField: "ProdId",
                caption: "ID"
            }, {
                dataField: "ProdDesc",
                caption: "Description"
            }, {
                dataField: "Type",
                caption: "Type"
            }],

            rowAlternationEnabled: true
        },

        // Returns {}
        console.log("Datasource: " + JSON.stringify(viewModel.overviewDatagridOptions.dataSource));
        return viewModel;
    };

编辑:我将数据源更改为:

dataSource: {
    load: function (loadOptions) {
        var d = new $.Deferred();
        var params = {};
        //Getting filter options
        if (loadOptions.filter)  {
            params.filter = JSON.stringify(loadOptions.filter);
        }
        //Getting sort options
        if (loadOptions.sort)  {
            params.sort = JSON.stringify(loadOptions.sort);
        }    
        //Getting dataField option
        if (loadOptions.dataField)  {
            params.dataField = loadOptions.dataField;
        }         
        //If the select expression is specified
        if (loadOptions.select)  {
            params.select= JSON.stringify(loadOptions.select);
        } 
        //Getting group options
        if (loadOptions.group)  {
            params.group = JSON.stringify(loadOptions.group);
        } 

        //skip and take are used for paging
        params.skip = loadOptions.skip; //A number of records that should be skipped
        params.take = loadOptions.take; //A number of records that should be taken
        var obj;
        $.getJSON('http://localhost:56253/test/3?format=json', params).done(function (data) {

        d.resolve(data);

        });
        //return obj;
        return d.promise();
    }, [...]

基于此处的演示:https://www.devexpress.com/Support/Center/Question/Details/KA18955

现在,数据源的输出不再为空,如下所示:

Object
- load:(loadOptions)
  - arguments:(...)
  - caller:(...)
  - length:1
  - name:"load"
  - prototype:Object
  - __proto__:()
  - [[FunctionLocation]]
  - [[Scopes]]:Scopes[1]
- totalCount:(loadOptions)
  - arguments:(...)
  - caller:(...)
  - length:1
  - name:"totalCount"
  - prototype:Object
  - __proto__:()
  - [[FunctionLocation]]
  - [[Scopes]]:Scopes[1]
  - __proto__:Object

0 个答案:

没有答案