2013-02-25 40 views
3

我有一个网格:ExtJS的编辑网格单元仅是新

Ext.create('Ext.grid.Panel', { 
    id: 'grid', 
    store: this.store, 
    columns: [{ 
     dataIndex: 'a' 
    },{ 
     dataIndex: 'b' 
    },{ 
     dataIndex: 'c' 
    }], 
    selModel: { 
     selType: 'cellmodel' 
    }, 
    plugins: [cellEditing] 
}) 

其中采用cellEditting:

var cellEditing = Ext.create('Ext.grid.plugin.CellEditing', { 
    clicksToEdit: 1, 
    listeners: { 
     beforeedit: function(obj) { 
       // Something goes here? 
     } 
    } 
}); 

现在,有按钮“添加行”给电网,因此记录可能是新的或旧的。

  • 在一个行被添加到存储/面板的情况下,我需要列bc可编辑。
  • 如果用户正在尝试编辑现有的行,该行在创建面板时从数据库中简单加载,那么我只需要列c即可编辑。

我怀疑我需要在beforeedit监听器中添加一些东西,但我是新来的ExtJS和JavaScript的一般,所以我不知道如何描述条件。

回答

5

你绝对是在正确的轨道上。 'beforeedit'事件允许您通过返回false来阻止编辑操作。如果您查看它的文档,你可以看到你收到的对象,它提供所有有关的细胞所需要的信息:http://docs.sencha.com/ext-js/4-1/#!/api/Ext.grid.plugin.CellEditing-event-beforeedit

var cellEditing = Ext.create('Ext.grid.plugin.CellEditing', { 
    clicksToEdit: 1, 
    listeners: { 
     beforeedit: function(editor, event, opts) { 
      if (!event.record.phantom && event.column.dataIndex == 'columnC') { 
       return false; 
      } 
     } 
    } 
}); 

幻象是保持知道一个记录是否是新创建的记录属性(不尚未同步到服务器),或者最初与商店中的所有其他人一起加载。

+0

我最终做了类似的事情。我在模型中添加了一个字段,该字段仅在插入项目时设置。我认为这可能是更好的方法,因为我有更多的控制何时设置/未设置。 – mvd 2013-02-25 23:59:32

+0

非常好,谢谢! – Emmanuel 2014-03-12 14:14:13

相关问题