2

私は従業員の出席のためのモジュールを開発しています。タイトルとして年の名前を表示するアコーディオンを使用しています。そして、すべてのアコーディオンの詳細に、月の名前を含むグリッドを配置しました。コントローラーでグリッド値を取得できますが、アコーディオン ヘッダーの名前を取得できないため、目的の結果をグリッドに表示できません。アコーディオンのタイトルの見出しを取得するために、これについて誰か助けてもらえますか? 私のアコーディオンの詳細は以下のとおりです。

Ext.define('Ext4Example.view.attendence.Timeperiod' ,{
        extend: 'Ext.form.Panel',
        alias : 'widget.timeperiod',
        id: 'timeperiod',
        region: 'west',
        border: false,
        width: 150,
        height:400,
        split: true,
        defaults: {
            // applied to each contained panel
            //bodyStyle: 'padding:15px'
        },
        layout: {
            // layout-specific configs go here
            type: 'accordion',
            titleCollapse: true,
            animate: true,
            activeOnTop: true
        },

        initComponent: function() {

            var today = new Date();
            var yyyy = today.getFullYear();

            this.items = [{
                title: 'Year '+yyyy,
                items: [{
                xtype: 'months'
                }]
                //html: 'Panel content!'
            },{
                title: 'Year '+(yyyy-1),
                items: [{
                xtype: 'months'
                }]
                //html: 'Panel content!'
            },{
                title: 'Year '+(yyyy-2),
                items: [{
                xtype: 'months'
                }]
                //html: 'Panel content!'
            },{
                title: 'Year '+(yyyy-3),
                items: [{
                xtype: 'months'
                }]
                //html: 'Panel content!'
            },{
                title: 'Year '+(yyyy-4),
                items: [{
                xtype: 'months'
                }]
                //html: 'Panel content!'
            }];

            this.callParent(arguments);
        }
    });

私の月のグリッドは以下のとおりです。

Ext.define('Ext4Example.view.attendence.Months' ,{
    extend: 'Ext.grid.Panel',
    alias : 'widget.months',
    border: false,
    viewConfig: {
        stripeRows: true
    },
     store: 'Months',    
    hideHeaders: true,
    initComponent: function() {        
        this.store = 'Months';
        this.width = 150;      
        this.columns = [
        {
            dataIndex: 'months', 
            flex:1
        }
        ];
        this.callParent(arguments);
    }
});

私のデータグリッドは以下のとおりです:

Ext.define('Ext4Example.view.attendence.Datagrid' ,{
    extend: 'Ext.grid.Panel',
    alias : 'widget.datagrid',
    layout: 'fit',
    viewConfig: {
        stripeRows: true
    },

    hideHeaders: false,
    initComponent: function() {  
        this.store = 'Attendences';
        //this.width = 400;      
        this.columns = [
        {
            text: 'Date',
            dataIndex: 'id'
        },
        {
            text: 'In-Time',
            dataIndex: 'intime'
        },
        {
            text: 'Out-Time',
            dataIndex: 'outtime'
        }


        ];

        this.callParent(arguments);
    }
});

すべてが一緒に追加される私のメインウィンドウを以下に示します:

Ext.define('Ext4Example.view.attendence.Attendencewindow' ,{
    extend: 'Ext.window.Window',
    alias: 'widget.attendencewindow',
    title: 'Attendence Information',
    layout: 'fit',
    modal: true,
    autoShow: true,
    resizable: false,
    //maximizable: true,
    collapsible: true,
    initComponent: function () {
        this.items = [
        {
            xtype: 'form',
            width: 550,
            bodyPadding: '8 0 8 0',
            border:false,
            layout: {
            type: 'hbox',
            align: 'stretch'
            },
            items:[{
            xtype: 'timeperiod'
            },{
            xtype: 'datagrid'
            }]
        }
        ];
        this.buttons = [

        {
            xtype: 'button',
            text: 'New',
            iconCls: 'new',
            action : 'clear'

        },{
            xtype: 'button',
            text: 'Save',
            iconCls: 'save',
            //iconAlign: 'top',
            action : 'save'


        },{
            xtype: 'button',
            text: 'Print',
            iconCls: 'print',
            action: 'close'
            //scope: this

        }
        ];
        this.callParent(arguments);
    }
});

私のコントローラーは以下のとおりです:

    Ext.define('Ext4Example.controller.Attendences', {
    extend: 'Ext.app.Controller',
    stores: [
    'Attendences','Months'
    ],
    models: [
    'Attendence','Month'
    ],
    views: [
    'attendence.Timeperiod','attendence.Details','attendence.Attendencewindow','attendence.Editattendence','attendence.Months','attendence.Datagrid'
    ],

    refs: [{
        ref: 'stockaddForm',
        selector: 'form'
    }],

    init: function () {
        this.control({
            'datagrid': {
                itemdblclick: this.editUser
            },
            'months': {
                itemclick: this.show
            },
            'attendencewindow button[action=save]': {
                click: this.save
            }

        });
    },

    editUser: function(grid, record){
        var view = Ext.widget('editattendence');
        view.down('form').loadRecord(record);
    },
    show: function(grid, record) {
    var hi = grid.ownerCt.title;
        alert(hi);
        var a = Ext.getCmp('timeperiod');
        var store = this.getAttendencesStore();
        store.load({
            filters: [
              {property:'month', value:record.data.value},
              {property:'year', value:2012}
            ]          
        });

},

save: function(){
        var today = new Date();
        var dd = today.getDate();
        var mm = today.getMonth()+1; //January is 0!
        var yyyy = today.getFullYear();     //+1
        Ext.Msg.alert("Today is - ",dd+" - "+mm+" - "+yyyy);
}
});

2012 年や 2011 年のようなアコーディオンのタイトルを取得する方法を教えてください。record.data.value で月の名前を取得できますが、アコーディオンのタイトルを取得できません。

助けてください

4

1 に答える 1

2

グリッドのitemclickイベントに自分自身を登録すると、コールバック内の最初の引数としてグリッド自体が取得されます。グリッドがアコーディオン内に直接ネストされているので、ownerCtを参照するだけです。

//lets pretend this is your callback
function(grid,record) {
    grid.ownerCt.title; // <- your accordion title
}

また、両方ともコンポーネント クエリ セレクターを必要とするup()ansも確認する必要があります。down()しかし、あなたの場合、これが最善の方法のようです。

編集

これが変更されたものですtimeperiod

Ext.define('Ext4Example.view.attendence.Timeperiod' ,{
        extend: 'Ext.form.Panel',
        alias : 'widget.timeperiod',
        id: 'timeperiod',
        region: 'west',
        border: false,
        width: 150,
        height:400,
        split: true,
        defaults: {
            // applied to each contained panel
            //bodyStyle: 'padding:15px'
        },
        layout: {
            // layout-specific configs go here
            type: 'accordion',
            titleCollapse: true,
            animate: true,
            activeOnTop: true
        },

        initComponent: function() {

            var today = new Date();
            var yyyy = today.getFullYear();

            this.items = [{
                title: 'Year '+yyyy,
                ident: 'accordion-panel',
                items: [{
                xtype: 'months'
                }]
                //html: 'Panel content!'
            },{
                title: 'Year '+(yyyy-1),
                ident: 'accordion-panel',
                items: [{
                xtype: 'months'
                }]
                //html: 'Panel content!'
            },{
                title: 'Year '+(yyyy-2),
                ident: 'accordion-panel',
                items: [{
                xtype: 'months'
                }]
                //html: 'Panel content!'
            },{
                title: 'Year '+(yyyy-3),
                ident: 'accordion-panel',
                items: [{
                xtype: 'months'
                }]
                //html: 'Panel content!'
            },{
                title: 'Year '+(yyyy-4),
                ident: 'accordion-panel',
                items: [{
                xtype: 'months'
                }]
                //html: 'Panel content!'
            }];

            this.callParent(arguments);
        }
    });

そして、変更されたコントローラー

Ext.define('Ext4Example.controller.Attendences', {
    extend: 'Ext.app.Controller',
    stores: [
    'Attendences','Months'
    ],
    models: [
    'Attendence','Month'
    ],
    views: [
    'attendence.Timeperiod','attendence.Details','attendence.Attendencewindow','attendence.Editattendence','attendence.Months','attendence.Datagrid'
    ],

    refs: [{
        ref: 'stockaddForm',
        selector: 'form'
    }],

    init: function () {
        this.control({
            'datagrid': {
                itemdblclick: this.editUser
            },
            'months': {
                itemclick: this.show
            },
            'attendencewindow button[action=save]': {
                click: this.save
            }

        });
    },

    editUser: function(grid, record){
        var view = Ext.widget('editattendence');
        view.down('form').loadRecord(record);
    },
    show: function(grid, record) {
    var hi = grid.up('[ident=accordion-panel]');
        alert(hi.title);
        var a = Ext.getCmp('timeperiod');
        var store = this.getAttendencesStore();
        store.load({
            filters: [
              {property:'month', value:record.data.value},
              {property:'year', value:2012}
            ]          
        });

    },

    save: function(){
            var today = new Date();
            var dd = today.getDate();
            var mm = today.getMonth()+1; //January is 0!
            var yyyy = today.getFullYear();     //+1
            Ext.Msg.alert("Today is - ",dd+" - "+mm+" - "+yyyy);
    }
});
于 2012-11-21T07:28:41.617 に答える