1

こんにちは、次の RowEditing プラグインを使用しています

ar rowEditing = Ext.create('Ext.grid.plugin.RowEditing', {
clicksToMoveEditor: 1,
autoCancel: false,
errorSummary:false,
onEnterKey: function(e) { console.log(e); },
listeners:{
    'beforeedit':function(grid,eOpts){
    },
    'canceledit':function(grid, eOpts){
        if(grid.grid.store.data.getAt(0).data.id == "new"){
            grid.grid.store.removeAt(0);
        }
    },
    'afteredit':function(editor, changes, record, rowIndex){
        editor.grid.store.reload();
    },
    'validateedit': handleUpdate{{params.alias}}
}
});

しかし、入力アクションは引き続き実行され、コンソールログは実行されません...リスナー内にも配置しようとしましたが、変更はありません...

ここに私のグリッドの私のアイテムがあります

  {
        header: 'Description',
        width: 160, 
        align: 'left',
        dataIndex: 'description',
                        filters: {
                type: 'string'
            },
            enableKeyEvents: true,
                            editor: {
                xtype: 'textfield',
                allowBlank: false,
                listeners: {
                    keydown:    {
                        element: 'el',
                        fn: function(el){ 
                            if (el.ENTER){
                                alert('test');
                                return false;
                            }
                        }
                    },
        },
            }
    }

そのため、次は、フィールド自体の内部での入力 (または行編集の送信) の実行を「無効にする」ことを試みます。しかし、falseを返すとフォームが送信され、onEnterKeyもそこで機能しません...誰かが私が間違っていることを知っていますか?

onEnterKey は親 Editing クラスの一部であることがわかりましたが、それをどのように呼び出すべきかはわかりません..

4

1 に答える 1

3

まず第一に、onEnterKeyは非公開としてマークされているため、特にインスタンス化の際にはオーバーライドしないでください。クラス メソッドをオーバーライドする場合は、メソッドを含むクラスから継承する新しいクラスを作成する必要があります。

Ext.define('My.grid.plugin.Editing', {
    extends: 'Ext.grid.plugin.RowEditing',

    onEnterKey: function() {
        this.callParent(arguments);            

        // your code here
    }
});

あなたの問題に関して、次のいずれかのアプローチをお勧めします。

A)本当に ENTER キー イベントのみを無効にしたい場合は、エディター フィールドでそれを行う必要があります。あなたの試みは終わりましたが、イベントリスナーはまだ正しいことをしていませんでした:

editor: {
    allowBlank: false,
    listeners: {
        keydown: function(e){ 
            if (e.getKey() == e.ENTER){
                e.stopEvent();
            }
        }
    }
}

このアプローチでは、ユーザーは行編集プラグインの [更新] ボタンをクリックするだけで変更を送信できることに注意してください。

B)特定の条件下で編集プラグインがストアに変更を書き込むのを防ぎたいだけの場合は、編集プラグインでvalidateeditイベントを使用することもできます。

listeners: {
    validateedit: function(editor, e) {
        if (true) { // your condition here
            return false;
        }
    }
}

これは、ユーザーが [更新] ボタンをクリックした場合にも機能します。

于 2013-10-14T11:08:37.167 に答える