5

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

我的目标是在网格中添加一个空白行,并立即使用网格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事件在添加后触发并反映了正确的索引,但该元素尚未出现在网格面板中,以便插件抓取它。
  • 添加后网格面板的afterrender事件没有触发
  • 网格面板的add事件仅在手动双击单元格以对其进行编辑后触发。它也最终与自己陷入了循环。

我不确定此时还可以尝试什么。

4

1 回答 1

1

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

尝试:

var inst = store.add(row)[0];
...
var index = store.indexOf(inst);
于 2013-07-22T21:34:53.877 回答