我使用插件CellEditing定义 treeGrid ,如
Ext.define('MyExample', {
extend: 'Ext.tree.Panel',
id: 'example',
alias: 'example',
....
plugins: [
Ext.create('Ext.grid.plugin.CellEditing', {
clicksToEdit: 1,
listeners: {
beforeedit: function(plugin, edit){
alert('don't run second time');
}
}
})
],
...
我有一个按钮当我点击这个按钮时会调用下面的窗口(此窗口上面有treeGrid)
Ext.create('Ext.window.Window', {
title: 'Phân xử lý',
modal:true,
height: 500
width: 500
layout: 'border',
...
item[
{
title: 'example',
region: 'center',
xtype: 'example', // that here
layout: 'fit'
}
]
第一次工作的所有东西,但是当我第一次关闭窗口并再次点击按钮再次调用窗口时,CellEditting仍在工作但是听众无法正常工作?
如何解决这个问题
修改的
请参阅 http://jsfiddle.net/E6Uss/ 中的示例代码
第一次点击按钮。一切运作良好
但是,当我关闭示例窗口并再次打开它时,我尝试再次单击以阻止单元格我得到一个类似的错误
如何修复此错误?感谢
答案 0 :(得分:6)
这里的问题是你在树形网格的插件数组中使用 Ext.create 。这具有创建它一次并将结果adhoc附加到您定义的类的效果。
如果关闭窗口,窗口中的所有资源都将被销毁。第二次实例化树面板时,插件不在那里。看看这个小提琴:我看你的问题是什么。看看http://jsfiddle.net/jdflores/E6Uss/1/
{
ptype : 'cellediting',
clicksToEdit: 1,
listeners: {
beforeedit: function(plugin, edit){
console.log('EDITOR');
if (edit.record.get('block')) {
alert('this cell have been blocked');
return false;
}
}
}
}
答案 1 :(得分:1)
每次点击按钮都会重新创建窗口。这种重新创建可能会破坏您的配置对象或破坏其中的关联或引用,或类似的东西。尝试通过使用以下内容替换按钮代码来重复使用窗口:
Ext.create('Ext.Button', {
text: 'Click me',
visible: false,
renderTo: Ext.getBody(),
handler: function(button) {
if(!button.myWindow)
{
button.myWindow = Ext.create('Ext.window.Window', {
title: 'Example',
height : 300,
width : 500,
layout: 'border',
closeAction: 'hide',
items: [{
region: 'center',
floatable:false,
layout:'fit',
xtype: 'example',
margins:'1 1 1 1'
}
]
});
}
button.myWindow.show();
}
});
答案 2 :(得分:-1)
也许它需要完成编辑单元格,尝试完成它:
...
beforeedit: function(plugin, edit){
alert('don't run second time');
plugin.completeEdit();
}
Sencha:CompleteEdit
答案 3 :(得分:-1)
我在这里整理了一个工作示例:http://jsfiddle.net/jdflores/6vJZf/1/
我认为你的专栏的问题在于它的dataIndex期望编辑器值是一个布尔类型(因为'block'被设置为datIndex而不是'date')。我假设你正在使用'block'字段来识别哪些被阻止编辑。我修改了此处提供的fidle:http://jsfiddle.net/jdflores/6vJZf/1/
{
text: 'Block Date',
dataIndex: 'date',
xtype: 'datecolumn',
format: 'd/m/Y',
editor: {
xtype: 'datefield',
allowBlank: true,
format: 'd/m/Y'
}
}