【问题标题】:Kendo DataSource - Add additional data not workingKendo DataSource - 添加其他数据不起作用
【发布时间】:2014-05-30 05:11:05
【问题描述】:

我的数据来源:

 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 字符串(url:“/api/securities”)替换读取 url 函数,则附加数据会正确添加。但是,当我按照上述方式进行操作时,我会收到两个 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 使用函数时,它无法知道如何处理相同的数据。或者这是我的猜测。

【问题讨论】:

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


    【解决方案1】:

    我认为你想要做的是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);
    };
    

    【讨论】:

    • 这样做,我什至没有得到查询字符串参数。我必须说我以为你有它。我使用 parameterMap 而不是 data 尝试了这种方式并得到了相同的结果。
    • 如果你想发送参数,你需要在你的DataService.Securities方法中添加它们; data 方法仅在您使用内置传输时才有效;检查文档中的数据参数:api.jquery.com/jquery.ajax
    • 嗯,是的,我确实想发送参数。这就是重点。为了能够在需要时添加它们,就像这里一样,但是能够在不需要任何时间的情况下使用 DataService.Securities。
    • 为 DataService.Securities 创建一个可选参数,然后在传递时使用 ajax 调用发送它们
    • 是的,但我想要一组独立的 ajax 调用,它们知道证券所需的特定 uri,但不需要知道其他任何内容。这个想法是任何应用程序都可以包含此服务,但不会被他们永远不会使用的方法所困扰,他们只是添加数据,例如,如果需要的话,可以提供某种安全性,或者如果他们想要一切,则什么都不指定.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-24
    • 2016-07-17
    • 2015-09-02
    • 1970-01-01
    • 1970-01-01
    • 2016-04-24
    • 1970-01-01
    相关资源
    最近更新 更多