如何避免在使用单元格编辑的ExtJS网格上按两次保存按钮
How to avoid pressing save button twice on an ExtJS grid that uses cell editing
当使用ExtJS网格进行单元格编辑时,可能存在必须单击按钮两次的问题,因为编辑器(文本字段)的模糊事件首先被调用,然后第一个按钮单击事件出于某种原因不再可访问。在这种情况下,如何避免按下(保存)按钮两次?
为了避免使用其他答案时出现的一些错误,我将需要的内容提取到它自己的xtype中,如下所示:
Ext.define('Predictive.view.ParamGridSaveButton', {
extend: 'Ext.button.Button',
alias: 'widget.paramGridSaveButton',
onMouseDown: function() {
Predictive.eventBus.fireEvent('dropdownSaveClicked', this);
this.callParent(arguments);
}
});
我们利用了mousedown应该在模糊之前触发的事实;看:应该先模糊还是先滑鼠?(尽管使用了jQuery,但还有不止一篇文章)。ExtJS没有直接在它的按钮组件上暴露mousedown,也许考虑到click足够,但它确实实现了一个onMouseDown方法,这是一个足够的入口点。
请参阅下面的工具栏定义,特别是IIFE中最后一个"保存"按钮(立即调用的函数表达式)。我正在做的是用Ext.function.createInterceptor增强的版本替换按钮实例的onMouseDown实现。
为了保持MVC友好,我可以(并且将)用单个事件的触发来代替整个函数体,控制器将侦听该事件。希望这对某些人有所帮助,并有兴趣看到其他建议的解决方案,无论是在这里还是在Sencha论坛
dockedItems: [{
xtype: 'toolbar',
dock: 'top',
items: [{
xtype: 'button',
text: 'Add Another'
}]
},{
xtype: 'toolbar',
dock: 'bottom',
items: [{
xtype: 'tbfill'
}, {
xtype: 'button',
text: 'Cancel'
}, (function() {
var saveButton = Ext.create('Ext.button.Button', {
text: 'Save'
});
saveButton.onMouseDown = Ext.Function.createInterceptor(saveButton.onMouseDown, function () {
var gridValues = Ext.pluck(saveButton.up('grid').store.data.items, 'data');
var paramTypeWindow = saveButton.up('window');
var typeDetailCell = paramTypeWindow.typeDetailCell;
paramTypeWindow.close();
if (typeDetailCell.items.length === 0) {
typeDetailCell.add({
xtype: 'textarea',
width: 375
});
}
typeDetailCell.items.getAt(0).setValue(Ext.encode(gridValues));
}, saveButton)
return saveButton;
})()]
}]
相关文章:
- ExtJS网格单元格编辑器,防止焦点松动问题
- EXTJS 5树状网格自定义行css
- 如何使ExtJS网格面板成为真正的只读组件
- Extjs 4网格:根据存储文本值在单元格中放置图标
- ExtJS使网格高度达到100%
- ExtJS网格在存储更新后未刷新
- 如何在ExtJS网格上创建带有标签的文本字段
- ExtJS网格未从Ext.data.XmlStore加载数据
- 当在EXTJS中的网格中使用时,afterrender不适用于组合框
- 由于本地存储代理,Extjs网格面板最多显示25行.如何更改此限制值
- 禁用鼠标单击网格,当 ext.window 打开 extjs 3
- 在 EXTJS 中启用多选网格时面临问题
- 在 ExtJS 中更新选项卡开关上的网格面板
- extJs 5 - 网格多级分组
- Extjs 3.4 中属性网格行值的工具提示 /Qtip(鼠标悬停)
- 在网格extjs中添加行
- 当鼠标悬停在网格extjs上的行的行体上时,检索行值
- 使用选择框对网格Extjs进行分组
- 更改groupField并重新加载网格Extjs 4
- 从网格ExtJs 4中获取一行