Extjs 4.1 - CellEditing 插件中的侦听第二次不起作用
Posted
技术标签:
【中文标题】Extjs 4.1 - CellEditing 插件中的侦听第二次不起作用【英文标题】:Extjs 4.1 - Listerning in CellEditing plugin not working at second time 【发布时间】:2013-07-24 06:38:32 【问题描述】:我定义了一个 treeGrid 与插件 CellEditing 类似
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/ 中查看我的示例代码 在我第一次单击按钮时。一切正常
但是当我关闭示例窗口并再次打开它时,我尝试再次单击以阻止单元格,我得到一个错误,例如
如何修复这个错误?谢谢
【问题讨论】:
在面板的initComponent
上创建插件
@MMT 我尝试 init initComponent: function () 但错误是 (TypeError: a is undefined ext-all.js line 21) ?
@MMT 你能修复我的代码吗?我尝试添加 initComponent 但我认为 initComponent 不存在?
【参考方案1】:
这里的问题是您在树网格的插件数组中使用 Ext.create。这具有创建一次并将结果临时附加到您定义的类的效果。
如果关闭窗口,窗口内的所有资源都会被销毁。第二次实例化树面板时,插件不存在。看看这个小提琴:我明白你的问题是什么。看看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;
【讨论】:
赞成澄清我的答案。虽然我认为在实际意义上,我的回答可能是总体上最好的路线。 谢谢你的工作。我发现了一些问题,问题是单元格编辑和它们使用 initComponent 函数。我尝试创建 initComponent 函数但失败了。我认为 TreeGrid 没有 initComponent 功能?【参考方案2】:每次单击按钮时,您都会重新创建窗口。这种重新创建可能会弄乱您的配置对象或破坏其中的关联或引用,或类似的东西。尝试通过将按钮代码替换为以下内容来每次重用窗口:
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();
);
【讨论】:
【参考方案3】:也许它需要完成编辑单元格,尝试完成它:
...
beforeedit: function(plugin, edit)
alert('don't run second time');
plugin.completeEdit();
煎茶:CompleteEdit
【讨论】:
我尝试在我的代码中:plugin.completeEdit(); if (edit.record.get('block'))return false;但不工作:(【参考方案4】:我在这里整理了一个工作示例:http://jsfiddle.net/jdflores/6vJZf/1/
我认为您的专栏的问题在于它的 dataIndex 期望编辑器值是布尔类型(因为 'block' 被设置为 datIndex 而不是 'date')。我假设您使用“阻止”字段只是为了识别哪些被阻止进行编辑。我修改了这里提供的文件: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'
【讨论】:
这不起作用:(。我希望我的日期单元格如果该单元格有block = true,则将被阻止,但在我的代码中,这只是第一次阻止? 我想你不明白我的问题。请看我的编辑。我只是解释我的问题 我认为你是对的。看看我下面的其他答案。以上是关于Extjs 4.1 - CellEditing 插件中的侦听第二次不起作用的主要内容,如果未能解决你的问题,请参考以下文章