在以编程方式将记录添加到ExtJS中的网格后切换单元格编辑器

anj*_*atl 5 extjs extjs4

我正在使用ExtJS 4.2.1并且设置相当简单:基于JSON的存储和从该存储读取的网格面板.添加按钮的单击事件会调用以下函数.

我的目标是在网格中添加一个空行,然后立即使用Ext.grid.plugin.CellEditing在gridpanel上启用的插件开始编辑它.

var addNewRow = function() {
  // start add logic
  var row = {
    'name': '',
    'email': '',
    'description': ''
  };
  store.add(row);

  // start auto-edit logic
  var index = store.indexOf(row); // -1
  var grid = Ext.ComponentQuery.query('gridpanel[itemId=upperPane]')[0];
  var plugin = grid.getPlugin('upperPaneEditor');
  plugin.startEdit( index, 0 );
};
Run Code Online (Sandbox Code Playgroud)

在调试时,index设置为-1,但不起作用.我用(0,0)测试了plugin.startEdit()的功能来编辑第一行的第一列,它工作正常.我尝试将自动编辑逻辑移动到各种事件处理程序尝试让它工作:

  • 商店的add事件在添加后触发并反映了正确的索引,但该元素尚未出现在gridpanel中,以便插件获取它.
  • afterrender添加后,gridpanel的事件没有触发
  • add只有在手动双击单元格进行编辑后才会触发gridpanel的事件.它也结束了自己的循环.

我不确定此时还有什么可以尝试的.

Ye *_*Liu 1

row是模型配置对象,而不是模型实例,因此store.indexOf返回 -1。

尝试:

var inst = store.add(row)[0];
...
var index = store.indexOf(inst);
Run Code Online (Sandbox Code Playgroud)