Kendo UI 数据源更改事件:它有效吗?
Posted
技术标签:
【中文标题】Kendo UI 数据源更改事件:它有效吗?【英文标题】:Kendo UI dataSource changed event: is it working? 【发布时间】:2012-12-03 07:26:40 【问题描述】:dataSource.changed 事件是否有效?
在我的 Kendo UI 网格实例化后,我将按照此处的文档绑定更改事件:
http://docs.kendoui.com/api/framework/datasource#change
//To set after initialization
dataSource.bind("change", function(e)
// handle event
);
我正在这样做:
// 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
// does reassigning the data array constitute a change?
// does changing the value of a particular item in the data array
// constitute a change?
// does removing an item from the data array constitute a change?
var grid = $("#grid").data("kendoGrid");
grid.refresh();
但是当我执行以下任一操作时,我的 dataChanged() 函数不会被调用:
var grid = $('#grid').data('kendoGrid');
grid.dataSource.data()[1]["deptname"] = 'XXX';
或
grid.dataSource.data = aDifferentArray;
我不确定“更改”事件到底在听什么。究竟是什么触发了它?
如果我创建一个全新的数据源,并将其分配给已有数据源的网格,我看不出这将如何触发现有数据源的更改事件。这样的事件(网格注意到其 dataSource 已被替换为不同的事件)将是网格级事件,而不是数据源级事件,对吧?
【问题讨论】:
【参考方案1】:需要注意的重要一点是支持DataSource
的数据是ObservableArray
,并且该数组中的数据项被转换为ObservableObject
s。
数据源的change
事件在两种情况下触发:
数据ObservableArray
发生变化(插入、删除记录)。这方面的一个例子是使用DataSource.add()
或DataSource.remove()
函数。
如果属性更改事件从数组中的 ObservableData
对象之一冒泡到 DataSource。但是,就像 Kendo MVVM 框架的其余部分一样,属性更改的通知仅在调用其 .set("propertyName", value)
函数时才会发生。
这就是grid.dataSource.data()[1]["deptname"] = 'XXX';
没有触发更改事件的原因。如果您将其更改为:grid.dataSource.data()[1].set("deptname", 'XXX');
那么它应该开始工作。基本上,将change
事件视为响应data
可观察对象触发的MVVM 属性更改而触发。
至于更改数据数组grid.dataSource.data = aDifferentArray;
我实际上不确定这是否会或应该触发更改。我从来没有尝试过。
【讨论】:
感谢您的澄清。.set
方法确实触发了更改事件,而 grid.dataSource.data = aDifferentArray
没有,据我所知。我希望 Kendo 网格中有一个与 WinForms 网格中的 DataSource_Changed 事件等效的事件——当网格被分配一个不同的数据源时触发,因为我希望每 60 秒用新数据刷新一次网格:***.com/questions/13892021/…
实际上,要换出数据,我认为您使用 .data()
函数:docs.kendoui.com/api/framework/datasource#data 所以您的代码将是 grid.dataSource.data(aDifferentArray);
有人考虑过使用 kendo.Observable 吗?我正在尝试将我的数据源作为可观察的,因此每当有更改时,它都会更新视图模型以上是关于Kendo UI 数据源更改事件:它有效吗?的主要内容,如果未能解决你的问题,请参考以下文章
Kendo UI Grid:如果有任何未决更改,则无法拦截和取消排序事件