dataSource.changed事件是否有效?
在我的Kendo UI网格实例化后,我按照文档绑定更改事件:
http://docs.kendoui.com/api/framework/datasource#change
//To set after initialization
dataSource.bind("change", function(e) {
// handle event
});
Run Code Online (Sandbox Code Playgroud)
我这样做:
// initialize
$("#grid").kendoGrid({
dataSource: dataSource,
blah blah blah
)
});
// end of initialization
// bind afterwards
var grid = $('#grid').data('kendoGrid');
grid.dataSource.bind("change", function (e) {
dataChanged();
});
//also tried a setTimeout:
// bind afterwards
setTimeout(function () {
var grid = $('#grid').data('kendoGrid');
grid.dataSource.bind("change", function (e) {
dataChanged();
});
}, 350);
function dataChanged() {
// handle "change" whatever that means -- documentation definition is hazy
// …Run Code Online (Sandbox Code Playgroud) 与监视动态变化数据的“仪表板”应用程序中的网格一样,我的(Telerik)Kendo UI 网格每隔 60 秒定期刷新一次新数据:
grid.dataSource.data(freshData);
grid.refresh(); // have been informed this refresh may not be necessary
Run Code Online (Sandbox Code Playgroud)
架构不会更改,但数据集中可能会显示一些新行,而有些可能已被删除。
虽然grid.refresh()分组保持不变,排序状态也被保留,但任何折叠的组都会被展开。
问题:如何保留(或恢复)组的展开/折叠状态(因此,专注于其他组折叠的特定展开组的用户不会因每个组重新展开的定期更新而感到不便/沮丧)默认)?
编辑:一些 Winforms 网格提供了一种在刷新数据之前“拍摄”组展开/折叠状态的快照的方法,然后在数据源刷新后重新应用该状态。如果 Kendo UI 网格中的组标题行具有 UID(在刷新后仍然存在),则可以完成。 但请参阅下面不涉及持久 UID 的建议方法。
用例:这是此功能的典型用例,但有些戏剧性。疾病控制中心正在按城市监测特定流感病毒株的实时爆发情况。每 15 秒刷新一次数据集。他们目前正专注于洛杉矶,并扩大了这座城市,而其他城市则崩溃了。如果整个网格每 15 秒扩大一次,就会激怒 CDC 的医生,他们进去掐死程序员,然后回家打高尔夫球,洛杉矶的每个人都屈服了。剑道真的要为那场灾难负责吗?
可能的功能增强建议:忽略我对上述 UID 的建议。这里有一个更好的方法。网格有
<div class="k-group-indicator" data-field="{groupedByDataFieldName}">
...
</div>
Run Code Online (Sandbox Code Playgroud)
现在,如果那个 k-group-indicator div 可以包含一个不同值的列表,data-field每个键的关联数据是相应部分的展开/折叠状态,那么就可以在创建之前将该列表保存到缓冲区中调用 dataSource.data( someNewData) 方法,然后在监听 dataBound 事件的事件处理程序中,可以重新应用那些展开状态。要找到分组值的相应分组部分,如果k-grouping-row可以有一个名为的属性group-data-value来保存特定分组部分的分组值,例如“销售”或“营销”,如果按数据分组,那将非常有帮助-字段称为部门。
<div class="k-group-indicator" data-field="dept" data-title="Dept" data-dir="asc">
...
<div class="k-group-distinct-values">
<div group-data-value="Sales" aria-expanded="false" />
<div group-data-value="Events Planning" aria-expanded="true" /> …Run Code Online (Sandbox Code Playgroud)