0

我正在尝试选择我的专栏的 itemid 编辑器,但我无法拦截来自控制器的事件。

看法:

Ext.define('MyApp.view.fatturaVendita.FatturaVendita', {
    extend: 'Ext.window.Window',

    height: 700,
    id: 'fatturaVendita',
    width: 1000,
    collapsible: true,
    title: 'Fattura Vendita',
    maximizable: true,

    initComponent: function() {
        var me = this;

        Ext.applyIf(me, {
            items: [
                {

                                   .....
                                      xtype: 'gridcolumn',
                                    itemId: 'clnCodiceArticolo',
                                    width: 45,
                                    sortable: false,
                                    dataIndex: 'CodiceArticolo',
                                    text: 'Art.:',
                                    editor: {
                                        xtype: 'textfield',
                                        itemId: 'txtCodiceArticolo',
                                        msgTarget: 'side'
                                    }
                                },
                                 ...... 

控制器:

......
        this.control(
               '#fatturaVendita  #txtCodiceArticolo':
                 {
                     afterrender: function (f, e) {
                         alert("change");
                     },

                     specialkey: function (f, e) {
                         alert(specialkey);
                         var me = this;
                         if (e.getKey() == e.ENTER) {
                             if (getWin(me.getIdWin(), '#txtCodiceArticolo').getValue() == "") {
                                 Ext.create('MyApp.view.fatturaVendita.Ricerca', { grd: "grdCorpoFatturaVendita", store: "ArticoloStore", dataDescrizione: "Descrizione", testoDescrizione: "Descrizione", idCampo: f.id, codice: f.name, descrizione: "DescrizioneArticolo" }).show();
                             }
                         }
                     },
                 },
   ......

我的网格列和编辑器的所有字段都使用 itemid,我仅将 id 用于我的窗口“fatturaVendita”。但是这段代码不起作用。我该怎么办?=(

类似于这个例子,但我不能让它工作。我似乎无法拦截网格文本字段的事件 SpecialKey:http: //jsfiddle.net/brux88/S2rdL/20/

**

更新:

** 感谢您的帮助,现在可以工作,但我不明白。我有一个多窗口应用程序。我将 itemid 用于控件,而每个窗口仅使用 id。如果我有两个窗口并且我有相同的 itemid (txtCodiceArticolo) extjs 如何确定我想要释放哪个事件?事实上,在我的控制器中,如果我使用

          this.control({  
  '#idWindows #itemId': {
                specialkey: function (f, e) {
                     if (e.getKey() == e.ENTER) {
                             alert("2");

                     }
                 }
        }

. 我不仅为专栏编辑工作。

4

1 回答 1

1

我在您的小提琴中发现了一个严重错误,即您的控制器的init()函数没有被调用,因此您的事件处理程序将永远不会运行。

init()如果您在函数中包含控制器,则框架会自动调用该Ext.application函数,如下所示:

Ext.application({
    controllers: [
        'YourApp.Controller'
    ],
});

但是,如果您尝试手动实例化控制器,则需要init()手动调用:

Ext.define('YourApp.Controller', {...});
var ctrl = Ext.create('YourApp.Controller');
ctrl.init();

这是这一点的官方文档

我让你的小提琴工作了,但似乎只有 ENTER 键触发specialkey事件。看看http://jsfiddle.net/jaux/Yqtv3/

更新:

你有多个窗口,每个窗口都有不同的 id,比如它们的 id 是“window1”、“window2”等。在控制器中,你将有类似的东西:

this.control({
    '#window1 #txtCodiceArticolo': {
        specialkey: {...}
    },
    '#window2 #txtCodiceArticolo': {
        specialkey: {...}
    }
})

这就是说第一个'specialkey'属于window1的txtCodiceArticolo,第二个'specialkey'属于window2的txtCodiceArticolo。

于 2013-06-07T08:11:13.673 回答