2011年6月5日星期日

  Ext4 Grid中点击按钮使用rowedit新建记录+取消删除新建的记录

预期效果如下:

1、点击“新文件按钮”新增一条默认记录

image

2、点击update写入数据库,清空dirty标记,并将返回的id写入store

3、点击cancel删除新增的记录

需要注意一下几点:

1、新增的记录是采用phantom属性标记的,phantom==true为未上传记录,点击cancel时删除

2、rowedit未提供cancel按钮事件,需要覆盖cancelEdit()函数

3、grid加载的时候会触发rowedit的cancelEdit(),删除行的时候也会触发……(这到底是为了什么????bug!!)所以必须有标志位控制,否则会导致无限循环。

方法如下:

var newSignal='normal';

1、grid上加入按钮,加入点击事件,注意打好标志位,否则会导致重复点击,用rowedit的editing当标志位也ok,但下一个也要用,所以这个标记有3个状态,暂时就这样写。

   dockedItems: [{ xtype:  ' toolbar ' , cls:  ' x-docked-noborder-top ' , items: [{ text:  ' 新文件 ' , iconCls:  ' icon-new-topic ' , handler :  function (){  if (newSignal == ' normal ' ){  //  Create a record instance through the ModelManager    var  r  =  Ext.ModelManager.create({ title:  ' 新文件aa ' , classId: ' 3384fcb7-3106-4fdd-ab65-31152eef9edb ' , typeId: ' 9b6d5105-42d2-40b5-b054-63cbf7da1fdc ' , datetimeCreated: Ext.Date.clearTime( new  Date()) },  ' File ' ); Ext.getStore( ' filesStore ' ).insert( 0 , r); newSignal = ' newing ' ; rowEditing.startEdit(Ext.getStore( ' filesStore ' ).first(), this .ownerCt.ownerCt.columns[ 0 ]); }}}]    

2、覆盖cancelEdit()函数注意store.findBy()函数,接收的是一个function为参数,function()返回true就为合格结果。

   var  rowEditing =  Ext.create( ' Ext.grid.plugin.RowEditing ' , { id: ' rowEditing ' , autoCancel:  false , clicksToEdit:  2 ,  // override取消编辑方法,加入自己的业务逻辑(新建文件点击取消后rollback)    // 这里需要加入标志位,不让会导致无限循环错误,因为grid的load,store的remove都会导致cancelEdit    // 判断有米有new,使用phantom属性,boolean   cancelEdit:  function () {  var  me  =   this ;  if  (me.editing) { me.getEditor().cancelEdit(); store = Ext.getStore( ' filesStore ' );  var  n = store.findBy( function (r){ return (r.phantom == true )})  if (newSignal == ' newing ' ){  if (n !=- 1 ){ store.removeAt(n); } newSignal = ' normal ' ; } } }, listeners:{ edit: function  onEdit(e) {  //  execute an XHR to send/commit data to the server, in callback do (if successful):   e.store.sync(); } } });    

3、点击update的操作需要使用回调函数,请参照上一篇文章,我就不在这里写了(因为ie中的bug始终无法解决,暂时放弃roweditor,使用自定义的panel修改数据),有兴趣的同学请参照以上

没有评论:

发表评论