0

我的面板上有一个网格,名为gridView,并且gridView在名为 的面板中panelMain,通过dbclick网格行上的侦听器,我通过执行以下操作加载一个 from:

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。
  • 我有一个用于网格和编辑学生页面的控制器。
4

2 回答 2

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);
}

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

于 2012-11-12T20:12:44.953 回答
0

a)您在这里没有使用 MVC 模式。使用 Sencha 所称的 MVC,您可以将所有这些代码放在控制器中,而不是事件侦听器中。
b) 我强烈怀疑这段代码会在某处导致死锁,事件连续触发得如此之快,以至于浏览器会冻结。您需要使用调试器来查看究竟发生了什么。

于 2012-08-10T22:48:51.940 回答