0

という名前のパネルにグリッドがあり、グリッド行のリスナーによって、という名前のパネルにgridViewあります。次のようなことを行って from をロードします。gridViewpanelMaindbclick

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 を使用しています。
  • グリッド用のコントローラーが1つあり、学生ページを編集します。
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);
}

successfailureは、submit 関数のコールバック関数です。

于 2012-11-12T20:12:44.953 に答える
0

a)ここではMVCパターンを使用していません。SenchaがMVCと呼んでいるものを使用すると、このすべてのコードをイベントリスナーではなくコントローラーに含めることができます。
b)このコードがどこかでデッドロックを引き起こし、イベントが連続して非常に急速に発生し、ブラウザがフリーズするのではないかと強く疑っています。正確に何が起こるかを確認するには、デバッガーを使用する必要があります。

于 2012-08-10T22:48:51.940 に答える