【问题标题】:How to use URLs like '/update/:id' as KendoUI datasource?如何使用像 '/update/:id' 这样的 URL 作为 KendoUI 数据源?
【发布时间】:2025-12-21 03:05:12
【问题描述】:

我阅读了文档,但没有发现与在 dataSource url 中设置参数相关的内容。有可能实现吗?

提前致谢。

【问题讨论】:

    标签: rest kendo-ui kendo-datasource kendo-mvvm


    【解决方案1】:

    是的,这是可能的。 DataSource.transport 中定义的 urls 可能是一个函数。此函数接收(对于update)作为第一个参数,正在更新的数据(模型)并返回应该用作 URL 的字符串。

    为您想要做的事情编写 URL:

    var ds = new kendo.data.DataSource({
        transport: {
            read: {
                url: function () {
                    return 'read';
                }
            },
            update: {
                url : function (item) {
                    return 'update/' + item.id;
                }
            }
        }
    });
    

    【讨论】:

    • 经过测试。正确答案,非常简洁。谢谢。 :)
    • 确实,这很好用,但前提是 batch=false 在您的数据源中(默认情况下)。当您启用批处理操作时,item 参数将是模型的集合 - 不会映射到单个 RESTful 服务。
    • 你能解释一下吗?我没有得到,我如何将“项目”传递给这个函数。
    • 如果您遇到 item.id 未定义的问题,请尝试将 id: "id" 添加到您的模型中。
    【解决方案2】:

    简答

    没有。

    长答案

    参数与传输对象的url 参数内联传递...

    var id = 'abc123';
    
    var ds = new kendo.data.DataSource({
      transport: {
        read: {
          url: 'api/employees?id=' + id
        }
      }
    });
    

    ...或者它们在传输对象的data 参数中传递。

    var id = 'abc123';
    
    var ds = new kendo.data.DataSource({
      transport: {
        read: {
          url: 'api/employees',
          data: {
            id: id;
          }
        }
      }
    });
    

    var id = 'abc123';
    
    var ds = new kendo.data.DataSource({
      transport: {
        read: {
          url: 'api/employees',
          data: function () {
            return { id : id };
          }
        }
      }
    });
    

    【讨论】: