Kendo DataSource - 添加其他数据不起作用

时间:2014-05-30 05:11:06

标签: kendo-ui kendo-grid kendo-datasource

我的数据来源:

 var asGridDataSource = new kendo.data.DataSource({
    transport: {
        read: {
            url: function (options) {
                DataService.Securities()
                    .done(function (secs) {
                        // notify the data source that the request succeeded
                        options.success(secs);
                    })
                    .fail(function (secs, testStatus, err) {
                        // notify the data source that the request failed
                        options.error(stats);
                    });
            },
            data: function () {
                return {
                    id: $($searchCriteria).val(),
                    searchBy: $(searchByDDL).val(), 
                };
            }
        }
        ...

DataServices.Securities功能:

    Securities = function () {
    return $.ajax({
        url: "/api/securities"
    });
};

如果我用简单的url字符串替换read url函数(url:" / api / securities"),则会正确添加其他数据。但是,当我按上述方式执行此操作时,我收到两个Http请求:

/api/securities
/?id=5&searchBy=3

而不是一个看起来像这样的请求:

/api/securities?id=5&searchBy=3

我能找到的唯一一个Kendo文档有一个如何使用如上所述的url字符串添加这样的数据的示例,但是在使用函数时却没有。为什么我没有得到一个请求?


编辑:

在对此工作之后,我想我明白了。我从这开始:

var asGridDataSource = new kendo.data.DataSource({
    transport: {
        read: {
            url: "/api/securities",
            data: function () {
                return {
                    id: $($searchCriteria).val(),
                    searchBy: $(searchByDDL).val()
                };
            }
        }
     }
});

这样做,只有这样,会产生如下请求:/ api / securities?id = 6& searchBy = 3。我想修改上面的内容,使用url的函数而不是硬编码的字符串。这就是原始问题的最重要部分是尝试做的事情。但是,数据功能的规范不起作用。在硬编码的url示例中,Kendo知道从页面获取id和searchBy并将其附加到url。但是当我使用url函数时,它无法知道如何处理相同的数据。或者这是我的猜测。

1 个答案:

答案 0 :(得分:0)

我认为你想要做的是make transport.read a function,因为你想手动检索数据,而不是transport.read.url,这是用于在使用内置传输时返回url字符串:

transport: {
    read: function (options) {
        var params = {
            id: $($searchCriteria).val(),
            searchBy: $(searchByDDL).val(),
        };
        DataService.Securities(params)
            .done(function (secs) {
            // notify the data source that the request succeeded
            options.success(secs);
        })
            .fail(function (secs, testStatus, err) {
            // notify the data source that the request failed
            options.error(stats);
        });
    }
}

要向Securities方法添加可选参数,您可以采取以下措施:

DataService.Securities = function (params) {
    var options = {
        url: "/api/securities"
    };

    if (params) {
        options.data = params;
    }

    return $.ajax(options);
};