我正在使用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 );
};
在调试时,index设置为-1,但不起作用。我用(0,0)测试了plugin.startEdit()的功能来编辑第一行的第一列,它工作正常。我尝试将自动编辑逻辑移动到各种事件处理程序,试图让它工作:
add
事件在添加后触发并反映了正确的索引,但该元素尚未出现在网格面板中,以便插件抓住它。afterrender
事件未触发
add
事件,但只有在手动双击一个单元格进行编辑后才会触发。它也最终成了一个循环。我不确定此时还有什么可以尝试。
答案 0 :(得分:1)
您的row
是模型配置对象,而不是模型实例,因此store.indexOf
返回-1。
尝试:
var inst = store.add(row)[0];
...
var index = store.indexOf(inst);