Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/423.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ExtJS 4.1.1a:在使用set方法修改记录后,取消选择网格中的项_Javascript_Gridview_Extjs_Extjs4.1 - Fatal编程技术网

Javascript ExtJS 4.1.1a:在使用set方法修改记录后,取消选择网格中的项

Javascript ExtJS 4.1.1a:在使用set方法修改记录后,取消选择网格中的项,javascript,gridview,extjs,extjs4.1,Javascript,Gridview,Extjs,Extjs4.1,好了 我有一个非常基本的示例,其中一个网格只有一项,一个按钮用底层记录的set方法更新这个条目 问题是,如果在通过按下按钮更新记录时选择了该项,则该选择将被删除,之后将无法再选择该项 工作示例: 对我来说似乎是个bug,因为在重新排列名称列之后,选择会重新出现 我真的很感谢你对这件事的评论 谢谢 编辑:重新格式化了一些代码…在列标题的标题单击事件中,网格视图中的旧选择已被记住,在呈现排序视图后,将再次选择这些记录 在rec.set()的情况下,将触发Ext.data.store的“更新”事件,

好了

我有一个非常基本的示例,其中一个网格只有一项,一个按钮用底层记录的set方法更新这个条目

问题是,如果在通过按下按钮更新记录时选择了该项,则该选择将被删除,之后将无法再选择该项

工作示例:

对我来说似乎是个bug,因为在重新排列名称列之后,选择会重新出现

我真的很感谢你对这件事的评论

谢谢



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

在列标题的
标题单击事件中,网格视图中的旧选择已被记住,在呈现排序视图后,将再次选择这些记录

rec.set()
的情况下,将触发
Ext.data.store
的“更新”事件,而不是
datachanged
。但没有与“更新”事件上的
headerclick
相同的与选择旧记录相关的实现

因此,您必须在after
rec.set()
上执行记录选择


是关于类似问题的讨论。

在列标题的
标题单击事件中,已记住网格视图中的旧选择,在呈现排序视图后,将再次选择这些记录

rec.set()
的情况下,将触发
Ext.data.store
的“更新”事件,而不是
datachanged
。但没有与“更新”事件上的
headerclick
相同的与选择旧记录相关的实现

因此,您必须在after
rec.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();
}