一个小问题,但是困扰了我很久……
要完成这样一个功能,在grid里面编辑数据,自动sync后根据服务器端返回的信息进行操作:去掉dirty标志、恢复原值、弹出提示框==
store这样设置:
Ext.create( ' Ext.data.DirectStore ' , { model: ' File ' , storeId: ' filesStore ' , autoLoad: true , autoSync: true , remoteSort: true , api: { create: MyApp.FileAction.Create, read: MyApp.FileAction.Load, update: MyApp.FileAction.Update, destroy: MyApp.FileAction.Destroy }, writer: new Ext.data.JsonWriter({ encode: false , writeAllFields: true }), idProperty: ' id ' , totalProperty: ' total ' , root: ' data ' , sorters: [{ property: ' datetimeCreated ' , direction: ' DESC ' }]});如果使用手工调用方法,可以指定参数、回调函数==,但是Ext.data.DirectStore中通过api或者directFn指定的服务器端函数只能写函数名称,不能指定回调函数,例如update api里面指定MyApp.FileAction.Update,ext会自动把需要的参数传进去,可以指定参数顺序,但是不能指定callback function。
在ext3中grid编辑行,服务器端返回后会自动执行默认的callback,去掉dirty标志==,但是在ext4中不会自动执行,还不能指定callback,郁闷啊郁闷……看了下ext的源码,试着使用参数例如{operation:XXX,callback:xxx}指定则会报directCfg错误……继续郁闷……
找了些国内国外的例子,都没有类似的例子,文档里面也木有啊!连传的神马参数都木有!!只好自己一次一次的跟踪测试……
过程巨痛苦,最后找到的解决方法如下:
api或者directFn指定的名称不一定要服务器端方法,也可以是自己定义的function,所以自己定义个带回调的function把参数传进去就o了,不过最后还是不爽的是ext居然没有把record的示例传进去,进行操作的时候还要用id搜索!是我没找对地方吗?谁来教教我!烂文档啊就没写有木有!!
不咆哮了,上代码:
服务器端:
public JObject Update(JObject o){ FileInfo c = JsonConvert.DeserializeObject < FileInfo > (o.ToString()); JProperty success = new JProperty( " success " , " false " ); try { c.Save(); success = new JProperty( " success " , " true " ); } catch { } return new JObject( success, new JProperty( " id " ,c.Id), new JProperty( " title " ,c.Title) );}js:
// 创建filesStore的callback function var callback = function (response, e) { if (response.success == ' true ' ){ Ext.getStore( ' filesStore ' ).getById(response.id).commit() Ext.MessageBox.alert( ' callback ' ,response.title + ' 已经更新 ' ) } else { Ext.getStore( ' filesStore ' ).getById(response.id).reject() Ext.MessageBox.alert( ' callback ' ,response.title + ' 更新失败 ' ) }}; // 创建filesStore Ext.create( ' Ext.data.DirectStore ' , { model: ' File ' , storeId: ' filesStore ' , autoLoad: true , autoSync: true , remoteSort: true , api: { create: MyApp.FileAction.Create, read: MyApp.FileAction.Load, update: function (rec){MyApp.FileAction.Update(rec,callback);}, destroy: MyApp.FileAction.Destroy }, writer: new Ext.data.JsonWriter({ encode: false , writeAllFields: true }), idProperty: ' id ' , totalProperty: ' total ' , root: ' data ' , sorters: [{ property: ' datetimeCreated ' , direction: ' DESC ' }]});测试成功,上图:
没有评论:
发表评论