Kendo ui 如何显示/隐藏网格?
我有一个应用程序,列出了任何一天发生的事件。 应用程序显示一个DateTimePicker,用户选择一个日期。如果当天有事件,将显示一个网格,列出找到的记录 如果在这之后用户选择了另一个日期,我必须销毁前一个网格,以便在找到新选择的日期的事件记录时使用下一个网格 仅做以下操作是不够的,我需要知道我缺少什么才能获得所需的行为:Kendo ui 如何显示/隐藏网格?,kendo-ui,kendo-grid,Kendo Ui,Kendo Grid,我有一个应用程序,列出了任何一天发生的事件。 应用程序显示一个DateTimePicker,用户选择一个日期。如果当天有事件,将显示一个网格,列出找到的记录 如果在这之后用户选择了另一个日期,我必须销毁前一个网格,以便在找到新选择的日期的事件记录时使用下一个网格 仅做以下操作是不够的,我需要知道我缺少什么才能获得所需的行为: var grid = $("#grid").data("kendoGrid"); grid.destroy(); 根据,这将从网格中删除所有事件处理程序等。 之后,您只需
var grid = $("#grid").data("kendoGrid");
grid.destroy();
根据,这将从网格中删除所有事件处理程序等。之后,您只需要将其从DOM中删除,即
$(“#网格”).remove()代码>您不需要破坏网格或数据源。相反,捕获日期上的任何更改并调用数据源。读取
步骤:
- 根据您的需要定义日期时间选择器(或仅定义日期选择器或日历)李>
HTML:
- 定义用于从服务器检索事件的数据源。假设处理请求的
url
是GetEvents
,它在请求中接收一个名为date
的参数,该参数是事件的日期。示例GetEvents?日期=周一+七月+15+2013+19%3A44%3A55+GMT%2B0200+(CEST)
JavaScript:
var ds = new kendo.data.DataSource({
transport: {
read: {
url : "GetEvents.php",
data: function () {
return { "date": evDate.value() }
}
}
},
schema : {
model: {
id : "id",
fields: {
event: { type: "string" },
date : { type: "date" }
}
}
},
pageSize : 10
});
- 使用以前的数据源定义网格:
JavaScript
var grid = $("#grid").kendoGrid({
dataSource: ds,
editable : false,
pageable : true,
columns : [
{ field: "id", width: 60, title: "#" },
{ field: "date", width: 140, title: "Date", format: "{0:yyyy-MM-dd HH:mm}" },
{ field: "event", width: 400 }
]
}).data("kendoGrid");
因此,诀窍是在DateTimePicker
中定义一个change
事件处理程序:每次更改日期时,它都会触发一个change
事件,在该事件中调用grid.read()
网格transport.read
定义为参数(transport.read.data
)date
加上从DateTimePicker
读取的值。请不要创建和销毁网格。如果网格的结构总是相同的(从您对问题的描述中可以看出),只需更改与网格关联的数据源中的过滤条件即可。它速度更快,内存消耗更少,而且编程更容易。所以我应该“销毁”它的内部数据源吗?。。。如何做到这一点。。。如何访问内部数据源?要访问数据源,您可以执行$(“#网格”).data(“kendoGrid”).datasource
,但请不要破坏任何内容,只需更改过滤条件或重新读取数据源即可。如何从服务器获取数据?您能展示一下您的网格和数据源定义吗?然后我可以告诉你如何使用你的代码。编辑包含它的原始帖子。网格必须重新显示,所以我想,正如OnaBai提到的那样,最好不要将其从DOM中完全删除。我只是想让它变得不可侵犯,主要是为了防止新选择的日期不涉及数据库的任何“事件”记录…谢谢OnaBai。。。但我在解释我的处境时可能犯了一个错误。。。应用程序已经在做这些了。我正在根据新日期获取新数据。。。一切正常。。。只是我需要知道如何干净地删除网格,使其从应用程序窗口消失,或者使用基于新日期的新数据替换为新网格。所以你说我必须用相同的DOM元素重新创建一个新的网格?不,我要说你没有犯任何错误。我知道你已经有了一些我无法得到的代码,为什么还要痴迷于破坏网格。相信我,这将导致您的问题,您的应用程序将变慢。为什么DatePicker
的change
事件中的ds.read()
对您来说不够?这将使用新日期的事件刷新网格。
var ds = new kendo.data.DataSource({
transport: {
read: {
url : "GetEvents.php",
data: function () {
return { "date": evDate.value() }
}
}
},
schema : {
model: {
id : "id",
fields: {
event: { type: "string" },
date : { type: "date" }
}
}
},
pageSize : 10
});
var grid = $("#grid").kendoGrid({
dataSource: ds,
editable : false,
pageable : true,
columns : [
{ field: "id", width: 60, title: "#" },
{ field: "date", width: 140, title: "Date", format: "{0:yyyy-MM-dd HH:mm}" },
{ field: "event", width: 400 }
]
}).data("kendoGrid");