Kendo ui 为什么在修改数据项后不会引发KendoUI数据源更改事件?

Kendo ui 为什么在修改数据项后不会引发KendoUI数据源更改事件?,kendo-ui,datasource,Kendo Ui,Datasource,我编写了一个JSFIDLE,它演示了在修改数据项时不会触发更改事件 走到小提琴,你会看到一个网格和网格下的一些链接。 按顺序单击每个链接,您将看到修改操作确实发生,但不会引发更改事件。当您单击“刷新网格”链接时,可以看到修改确实发生了。但是,对于添加/删除操作,不需要刷新网格,也会引发更改事件 如何在修改数据项时引发更改事件 问候, 斯科特 出于某种原因,StackOverflow说:“到JSFIDLE.net的链接必须附带代码” 标记: 连接数据源 添加记录 修改记录 刷新网格 删除记

我编写了一个JSFIDLE,它演示了在修改数据项时不会触发更改事件

走到小提琴,你会看到一个网格和网格下的一些链接。 按顺序单击每个链接,您将看到修改操作确实发生,但不会引发更改事件。当您单击“刷新网格”链接时,可以看到修改确实发生了。但是,对于添加/删除操作,不需要刷新网格,也会引发更改事件

如何在修改数据项时引发更改事件

问候,

斯科特

出于某种原因,StackOverflow说:“到JSFIDLE.net的链接必须附带代码”

标记:


  • 连接数据源
  • 添加记录
  • 修改记录
  • 刷新网格
  • 删除记录
JavaScript:

var\u数据=[
{用户ID:1,用户全名:'Bob Smith',用户角色:'Administrator'},
{用户ID:2,用户全名:'Barry Baker',用户角色:'Viewer'},
{用户ID:3,用户全名:'Bill Cow',用户角色:'Editor'},
{Users\u ID:4,Users\u全名:'Boris Brick',Users\u角色:'Administrator'}
],
_dataSource=新的kendo.data.dataSource({data:_data});
$(“#肯多格里德”)。肯多格里德({
数据源:_数据源,
栏目:[
{字段:“用户\全名”,标题:“全名”},
{字段:“用户\角色”,标题:“角色”,宽度:“130px”}
]
});
$('#lnkRefreshGrid')。单击(函数(){
$(“#KendoGrid”).data(“KendoGrid”).refresh();
});
函数数据源更改(e、a、b){
var_data=this.data();
log('引发的更改事件|操作:'+e.Action+'|数据长度:'+_Data.Length);
}
函数数据源_错误(e){
console.log('引发的错误事件:'+e.status);
}
$('#lnkWireUpDataSource')。单击(函数(){
_bind('change',dataSourceChange);
_bind('error',dataSource\u error);
_dataSource.fetch();
});
$('#lnkAddRecord')。单击(函数(){
_添加({Users\u ID:5,Users\u全名:'bertbird',Users\u角色:'Viewer'});
});
$('#lnkModifyRecord')。单击(函数(){
var _dataItem=_dataSource.at(_dataSource.data().length-1);
_数据项['Users_Role']='Administrator';
});
$('#LNKREMOVERRECORD')。单击(函数(){
var _dataItem=_dataSource.at(_dataSource.data().length-1);
_dataSource.remove(_dataItem);
});

不会引发它,因为您正在更新
数组,而不是
可观察对象。使用时:

_dataItem['Users_Role'] = 'Administrator';
您要做的是更新JavaScript对象的属性。JavaScript中没有拦截/知道对象已被修改的方法

尝试:

相反,然后剑道UI
set
检查您是否正在更新对象并触发
事件
以及所有其他需要的操作


参见您在

Brilliant中修改的示例!!谢谢OnaBai,谢谢你抽出时间回答我的问题。非常感谢。
_dataItem.set('Users_Role', 'Administrator');