Kendo 数据源参数映射

Posted

技术标签:

【中文标题】Kendo 数据源参数映射【英文标题】:Kendo dataSource Parameter Map 【发布时间】:2013-09-12 18:27:28 【问题描述】:

我是剑道新手。我遇到了模型绑定问题。当我使用 firebug 进行调试时,它显示 options.models 是 undefined。由于这个原因,parameterMap 中的“if”条件始终为 false,并且网格不会填充数据。 但是当我删除 parameterMap 部分时,它可以工作。 我认为,如果有人能解释一下剑道数据源中的参数映射,那将非常有帮助。 谢谢你。

    function GetDataSource() 
    var PrjKy = $("#cmbPrjNm").val();
    if (PrjKy == "")  PrjKy = 1; 

    var PrcsDetKy = 1;
    if (PrcsDetKy == "")  PrcsDetKy = 1; 

    var PrcsTypKy = $("#toDotype").val();
    if (PrcsTypKy == "")  PrcsTypKy = 1; 

    var AprPrtyKy = $("#cmbPiority").val();
    if (AprPrtyKy == "")  AprPrtyKy = 1; 

    var AprStsKy = $("#status").val();
    if (AprStsKy == "")  AprStsKy = 1; 

    var OrginAdrKy = 1;
    if (OrginAdrKy == "")  OrginAdrKy = 1; 

    var AprUsrKy = 1;
    if (AprUsrKy == "")  AprUsrKy = 1; 

    var NxtActByAdrKy = $("#cmbEmployee").val();
    if (NxtActByAdrKy == "")  NxtActByAdrKy = 1; 

    var FrmNxtActEntDt = $("#FrmNextActEnt").val();
    var ToNxtActEntDt = $("#ToNextActEnt").val();

    var FrmNxtActDt = $("#rcdDt").val();
    var ToNxtActDt = $("#toDt").val();

    var FrmInsertDt = $("#insrtDt").val();
    var ToInsertDt = $("#InsrtToDt").val();

    var dataSource = new kendo.data.DataSource(
        transport: 
            read: 
                url: '@Url.Content("~/User/GetAllToDo")',
                data: 
                    'PrjKy': PrjKy,
                    'PrcsDetKy': PrcsDetKy,
                    'PrcsTypKy': PrcsTypKy,
                    'AprPrtyKy': AprPrtyKy,
                    'AprStsKy': AprStsKy,
                    'OrginAdrKy': OrginAdrKy,
                    'AprUsrKy': AprUsrKy,
                    'NxtActByAdrKy': NxtActByAdrKy,
                    'FrmNxtActEntDt': FrmNxtActEntDt,
                    'ToNxtActEntDt': ToNxtActEntDt,
                    'FrmNxtActDt': FrmNxtActDt, //changed on 2013-8-30
                    'ToNxtActDt': ToNxtActDt, //changed on 2013-8-30
                    'FrmInsertDt': FrmInsertDt, //changed on 2013-8-30
                    'ToInsertDt': ToInsertDt//changed on 2013-8-30
                ,
                dataType: "json"
            ,
            update: 
                url: "~/Home/UpdateToDo",
                contentType: 'application/json; charset=utf-8',
                dataType: "json",
                type: "POST"
            ,
            create: 
                url: '@Url.Content("~/Home/UpdateToDo")',
                contentType: 'application/json; charset=utf-8',
                dataType: "json",
                type: "POST"
            ,
            destroy: 
                url: '@Url.Content("~/User/DeleteToDo")',
                contentType: 'application/json; charset=utf-8',
                dataType: "json",
                type: "POST"
            ,
            parameterMap: function (options, operation) 
                if (operation !== "read" && options.models) 
                    return JSON.stringify( models: options );
                
            
        ,
        pageSize: 10
    , schema:
    
        model:
        
            id: "PrcsDetKy", //Primary key to uniquely identify the row.
            fields: //Relavent fields of the grid should be bind with following model items
                
                ID:  editable: false, nullable: false ,
                NxtActEntDt:  editable: true, nullable: false, validation:  required: true ,
                AprPrty:  editable: true, nullable: false, validation:  required: true ,
                AprUsr:  editable: true, nullable: true ,
                AprSts:  editable: true, nullable: true ,
                AprStsKy:  editable: true, nullable: true ,
                AprPrtyKy:  editable: true, nullable: true ,
                AprUsrKy:  editable: true, nullable: true ,
                AprResnKy:  editable: true, nullable: true ,
                PrjId:  editable: true, nullable: true ,
                TaskId:  editable: true, nullable: true ,
                TaskNm:  editable: true, nullable: false , //validation:  required: true
                PrcsDetKy:  editable: false, nullable: false ,
                TaskTyp:  editable: true, nullable: false ,
                PrcsTypKy:  editable: true, nullable: true ,
                PrjKy:  editable: true, nullable: true ,
                PrcsDetAprKy:  editable: true, nullable: true ,
                PrjNm:  editable: true, nullable: false, validation:  required: true ,
                Des:  editable: true, nullable: false ,
                NxtActByAdr:  editable: true, nullable: false, validation:  required: true ,
                NxtActByAdrKy:  editable: true, nullable: true ,
                NxtActDt:  editable: true, nullable: true ,
                Rem:  editable: true, nullable: true, type: "string" ,
                OriginBy:  editable: false, nullable: true ,
                Hyperlinks1:  editable: false, nullable: true ,
                Hyperlinks2:  editable: false, nullable: true ,
                Hyperlinks3:  editable: false, nullable: true ,
                Hyperlinks4:  editable: false, nullable: true ,
                OrginAdrKy:  editable: true, nullable: true ,
                WrkStnKy:  editable: true, nullable: true ,
                ObjKy:  editable: true, nullable: true ,
                ObjCd:  editable: true, nullable: true ,
                ObjNm:  editable: true, nullable: true ,
                ItmKy:  editable: true, nullable: true ,
                ItmCd:  editable: true, nullable: true ,
                IsAct:  editable: true, nullable: true ,
                IsApr:  editable: true, nullable: true ,
                OrgEntDt:  editable: true, nullable: true 
            
        
    
    );
    return dataSource;

【问题讨论】:

【参考方案1】:

你可以在这里找到很清楚的解释parameterMap

您应该使用 parametrMap 来定义自定义参数集或在调用远程服务期间执行其他操作。基本上你在这里说,如果我正在读取、更新或删除(这是你的 sn-p 中值“读取”的操作变量),我想将以下参数添加到我在“传输”中定义的方法中。

在您的情况下,您似乎没有定义 options.models,这意味着您的数据源没有任何变量/集合模型。好吧,它不必。在我看来,您尝试调用的 read 方法实际上不需要任何参数,因此您可能只是从 paramMap 返回空字符串,或者根本没有此配置部分。

注意:您定义数据源的方式有点混乱,当您定义“url”时,不应提供配置“数据”,例如。您正在获取 url 的数据。见Local vs Remote。

【讨论】:

【参考方案2】:

ParameterMap,在 Kendo 文档中定义,是一个将请求参数转换为适合远程服务的格式的函数。

在函数的格式中,ParameterMap:function(options, operation)...,options参数比较棘手。在 Kendo 文档中,它被称为数据。但是,开发人员会根据自己的喜好选择将其重命名为选项。但是,没有区别,因为它只是一个参数名称。

options 参数的值取决于传输部分正在做什么。如果是 read 操作,则 kendo 会自动使用 skiptakepage、pagesize 等。但是,这取决于剑道网格是否将 paging 设置为 true,sorting 设置为 true 等。因此,它实际上足够智能自动获取这些参数并将其传递给服务。

在服务中,函数的命名必须与 kendo 对参数的命名完全相同。默认情况下,如跳过、拍摄、页面等。但是,可以通过编写如下内容来更改参数名称:$top: data.take,如文档中所述。

我也是这个概念的新手,这就是我能收集到的。我希望我能在这篇文章中得到以下信息,那么它就会是一个完整的集合。

读取时选项的完整列表是分页和 排序设置为 true。 删除和更新选项的完整列表是什么。

【讨论】:

以上是关于Kendo 数据源参数映射的主要内容,如果未能解决你的问题,请参考以下文章

Kendo UI - 在读取数据源时指定参数名称

.NET Kendo Scheduler:动态更改数据源资源

Kendo Grid - 解析和格式化日期

kendo ui grid 动态控制某属性

范围刷新 + 部分刷新 + Kendo 数据源 + Kendo Grid + WebSync

带有自定义JSON Web服务器的Kendo UI Grid - “未捕获的TypeError:this.replace不是函数”