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 会自动使用 skip、take、page、pagesize 等。但是,这取决于剑道网格是否将 paging 设置为 true,sorting 设置为 true 等。因此,它实际上足够智能自动获取这些参数并将其传递给服务。
在服务中,函数的命名必须与 kendo 对参数的命名完全相同。默认情况下,如跳过、拍摄、页面等。但是,可以通过编写如下内容来更改参数名称:$top: data.take,如文档中所述。
我也是这个概念的新手,这就是我能收集到的。我希望我能在这篇文章中得到以下信息,那么它就会是一个完整的集合。
读取时选项的完整列表是分页和 排序设置为 true。 删除和更新选项的完整列表是什么。【讨论】:
以上是关于Kendo 数据源参数映射的主要内容,如果未能解决你的问题,请参考以下文章
.NET Kendo Scheduler:动态更改数据源资源
范围刷新 + 部分刷新 + Kendo 数据源 + Kendo Grid + WebSync
带有自定义JSON Web服务器的Kendo UI Grid - “未捕获的TypeError:this.replace不是函数”