加载页面多次后,EXTJS鼠标单击不起作用

时间:2012-08-10 10:40:59

标签: extjs extjs4.1 extjs-mvc

我的面板上有一个名为gridView的网格,而gridView位于名为panelMain的面板中,网格行上的dbclick侦听器,我加载了一个来自做这样的事情:

listeners:{
itemdblclick: function(dataview, index, item, e) {

    /* I did not create new studentForm every time.*/
    var editStudent = Ext.getCmp('editStudent');
    if(editStudent == undefined)
        editStudent = Ext.create('H.view.EditStudent');


    editStudent.getForm().load({
        url: 'studentDetails.php',
        params: {studentId: studentId},
        method:'GET',
        success: function (form, action) {

            var panelMain = Ext.getCmp('panelMain');
            panelMain.items.clear();

            panelMain.add(editStudent);
            panelMain.update();
            panelMain.doLayout();
        },
        failure: function (form, action) {
            /// do nothing
        }
    });
}

在我编辑学生后,我应该回到网格页面,所以我做了这样的事情:

var panelMain = Ext.getCmp('panelMain');
var gridView = Ext.getCmp('gridView');

panelMain.items.clear();

panelMain.add(gridView);
panelMain.update();
panelMain.doLayout();

问题是当我回到网格时,它不再触发任何itemdbclick事件(就像网格只是页面中的图像,没有事件触发)。

有时当我去编辑studentForm并返回网格工作时,但当我再次进入学生表格时,学生页面不会触发任何事件,当我点击编辑按钮时,我没有得到任何回答,我甚至看不到鼠标悬停(这会导致按钮颜色发生变化)。

这是什么问题?

  • 我使用Extjs 4和Extjs MVC。
  • 我有一个控制器用于网格并编辑学生页面。

2 个答案:

答案 0 :(得分:1)

我认为您误解了表单上的成功配置。 尝试:

listeners:{
itemdblclick: function ( gridView, record, item, index, e, eOpts ) {

    var editStudent = Ext.getCmp('editStudent');
    if(editStudent == undefined)
        editStudent = Ext.create('H.view.EditStudent');

    /* Load record in the form.
       Form must have on formfields property: 'name' equals to 'dataIndex' */

    editStudent.getForm().loadRecord(record); 

    var panelMain = Ext.getCmp('panelMain');
    panelMain.items.clear();

    panelMain.add(editStudent);
}

成功失败是提交功能的回调函数。

答案 1 :(得分:0)

a)你这里没有使用MVC模式。使用Sencha所谓的MVC,您可以将所有这些代码放在Controller而不是事件监听器中 b)我强烈怀疑这段代码会导致某些地方发生死锁,事件连续发生,导致浏览器冻结。您需要使用调试器来查看到底发生了什么。