6

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

在此处输入图像描述

    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;
}
4

2 回答 2

3

您可以在这里找到非常清楚的解释parameterMap

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

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

注意:您定义数据源的方式有点混乱,当您定义“url”时,您不应该提供配置“数据”,例如。您正在获取 url 的数据。请参阅本地与远程

于 2013-09-09T11:44:09.890 回答
2

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

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

options参数的值取决于传输部分正在做什么。如果它是读取操作,那么 kendo 会自动使用skiptakepagepagesize等字段填充它。但是,这取决于 kendo 网格是否将paging设置为 true ,sorting设置为 true 等。所以,它实际上很聪明足以自动获取这些参数并将其传递给服务。

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

我对这个概念也很陌生,这就是我能收集到的。我希望我能在这篇文章中获得以下信息,那么它将是一个完整的集合。

  • 在读取的情况下,选项的完整列表是分页和排序设置为真。
  • 删除和更新选项的完整列表是什么。
于 2016-05-16T14:35:50.530 回答