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

我使用的是ExtJS 4.2.1,并且有一个相当简单的设置:基于JSON的存储和从该存储中读取的一个网格面板。 一个添加按钮的点击事件调用下面的函数。

我的目标是向网格添加一个空行,并立即开始使用网格Ext.grid.plugin.CellEditing上启用的Ext.grid.plugin.CellEditing插件对其进行编辑。

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 );
};

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

  • 商店的add事件在添加之后触发,并且反映了正确的索引,但该元素尚未出现在网格面板中供插件抓取。
  • 添加后, afterrenderafterrender事件不会触发
  • 只有在手动双击单元格以编辑网格面板的add事件后才会触发该事件。 它也结束了与自己的循环。
  • 我不确定在这一点上还有什么其他的尝试。


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

    尝试:

    var inst = store.add(row)[0];
    ...
    var index = store.indexOf(inst);
    
    链接地址: http://www.djcxy.com/p/19543.html

    上一篇: Toggle cell editor after record programmatically added to grid in ExtJS

    下一篇: Ext.JS is there a way of tracking sort events on a grid panel?