Javascript ExtJS 4.1.1a:在使用set方法修改记录后,取消选择网格中的项
好了 我有一个非常基本的示例,其中一个网格只有一项,一个按钮用底层记录的set方法更新这个条目 问题是,如果在通过按下按钮更新记录时选择了该项,则该选择将被删除,之后将无法再选择该项 工作示例: 对我来说似乎是个bug,因为在重新排列名称列之后,选择会重新出现 我真的很感谢你对这件事的评论 谢谢Javascript ExtJS 4.1.1a:在使用set方法修改记录后,取消选择网格中的项,javascript,gridview,extjs,extjs4.1,Javascript,Gridview,Extjs,Extjs4.1,好了 我有一个非常基本的示例,其中一个网格只有一项,一个按钮用底层记录的set方法更新这个条目 问题是,如果在通过按下按钮更新记录时选择了该项,则该选择将被删除,之后将无法再选择该项 工作示例: 对我来说似乎是个bug,因为在重新排列名称列之后,选择会重新出现 我真的很感谢你对这件事的评论 谢谢 编辑:重新格式化了一些代码…在列标题的标题单击事件中,网格视图中的旧选择已被记住,在呈现排序视图后,将再次选择这些记录 在rec.set()的情况下,将触发Ext.data.store的“更新”事件,
编辑:重新格式化了一些代码…在列标题的
标题单击事件中,网格视图中的旧选择已被记住,在呈现排序视图后,将再次选择这些记录
在rec.set()
的情况下,将触发Ext.data.store
的“更新”事件,而不是datachanged
。但没有与“更新”事件上的headerclick
相同的与选择旧记录相关的实现
因此,您必须在afterrec.set()
上执行记录选择
是关于类似问题的讨论。在列标题的标题单击事件中,已记住网格视图中的旧选择,在呈现排序视图后,将再次选择这些记录
在rec.set()
的情况下,将触发Ext.data.store
的“更新”事件,而不是datachanged
。但没有与“更新”事件上的headerclick
相同的与选择旧记录相关的实现
因此,您必须在afterrec.set()
上执行记录选择
是关于类似问题的讨论。这是ExtJS 4.1.1中的一个bug,似乎在4.1.3中得到了解决,可以通过在更新记录后调用网格视图的刷新方法来解决:
我从Sencha论坛得到了这个答案:
这是ExtJS 4.1.1中的一个bug,似乎在4.1.3中解决了,可以通过在更新记录后调用网格视图的刷新方法来解决:
我从Sencha论坛得到了这个答案:
使用personsGrid.getSelectionModel().select(…)进行简单的手动选择将不起作用,因为在内部项目仍处于选中状态,但只有视觉选择丢失。因此,有必要手动进行dom选择(不确定您的意思是不是…)。正如您在我接受的答案中所看到的,只需调用网格视图的刷新方法,就可以更轻松地完成此操作。使用PersonGrid.getSelectionModel().select(…)进行简单的手动选择将不起作用,因为在内部项目仍处于选中状态,但只有视觉选择丢失。因此,有必要手动进行dom选择(不确定您的意思是不是…)。正如您在我接受的答案中所看到的,只需调用网格视图的刷新方法,就可以更轻松地完成这项工作。
Ext.onReady(function() {
var personsGrid = Ext.create('Ext.grid.Panel', {
width: 150,
height: 100,
renderTo: Ext.getBody(),
store: Ext.create('Ext.data.Store', {
fields: [ 'name' ],
data: [{ name: 'Stephen' }]
}),
columns: [{ text: 'Name', dataIndex: 'name', flex: 1 }],
});
var txtField = Ext.create('Ext.form.field.Text', {
fieldLabel: 'New name',
labelWidth: 70,
width: 150,
value: 'Alex',
renderTo: Ext.getBody()
});
Ext.create('Ext.button.Button', {
text: 'Rename person',
width: 150,
renderTo: Ext.getBody(),
handler: function() {
var rec = personsGrid.getStore().getAt(0);
rec.set('name', txtField.getValue());
}
});
});
handler: function() {
var rec = personsGrid.getStore().getAt(0);
rec.set('name', txtField.getValue());
personsGrid.getView().refresh();
}