extjs4选择器itemid列编辑器

时间:2013-06-06 16:33:32

标签: javascript extjs4

我正在尝试选择我的列的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");

                     }
                 }
        }

。我不仅适用于列编辑器。

1 个答案:

答案 0 :(得分:1)

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

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

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

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

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

这一点是official doc

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

更新

你有多窗口,每个窗口都有不同的id,比如他们的id是'window1','window2'等等。在控制器里,你会有类似的东西:

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

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