ExtJS 4.1.1a:使用set-method修改记录后,取消选择网格中的项目

时间:2013-01-10 07:08:51

标签: javascript gridview extjs extjs4.1

那里,

我有一个非常基本的例子,一个网格只有一个项目和一个按钮,用基础记录的set方法更新这个条目。

问题是,如果在按下按钮更新记录时选择了项目,则选择将被删除,之后就不能再选择它了。

工作示例:http://jsfiddle.net/fu2Xq/2/

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

对我来说似乎是一个错误,因为在重新排序名称列后,选择会重新出现......

我真的很感激对此发表评论!

由于


编辑:重新格式化了一些代码...

2 个答案:

答案 0 :(得分:1)

这是ExtJS 4.1.1中的一个错误,它似乎在4.1.3中得到解决,可以在更新记录后通过调用网格视图的refresh-method来解决:

http://jsfiddle.net/fu2Xq/7/

handler: function() {
    var rec = personsGrid.getStore().getAt(0);

    rec.set('name', txtField.getValue());  
    personsGrid.getView().refresh();
}

我从Sencha论坛得到了这个答案: http://www.sencha.com/forum/showthread.php?253287-Item-in-grid-is-deselected-after-record-has-been-modified-with-set-method&p=928197&viewfull=1#post928197

答案 1 :(得分:0)

在列标题的headerclick事件中,网格视图中的旧选择已被记住,在渲染排序视图后,这些记录将再次被选中。

如果是rec.set()datachanged的“更新”事件将被解雇,而不是Ext.data.store。但是没有与“更新”事件中的headerclick选择旧记录相关的实现。

因此,您必须在rec.set()之后实施记录选择。

Here是关于类似问题的讨论。