пятница, 15 декабря 2017 г.

Рецепты EXT JS

Сборка рецептов для Ext JS 6.2.0 - на текущий момент именно эту версию раздают под GPL
1. Как переключать контент в регионе?
2. Как вернуть Grid вертикальный scrollbar, если он не главный вид, а вложен в какой-нибудь tab?
3. Как передать record при даблклике на строке в grid в окно/панель? И установить фокус на нужное поле?



Как переключать контент в регионе?
просто.
К примеру, есть раскладка, в правом регионе надо переключать контент, делаем так
        region: 'east',
        xtype: 'container',
        layout: 'card',
...
        activeItem: 0,
        items: [{
            xtype: 'panel',
            title: 'Info',
            cls: 'info-panel',
            bodyPadding: 10,
            bind: {
                html: '{infoText}'
            }
        }, {
            xtype: 'mainform'
        }]

и затем в контроллере делаем функцию
    setActiveEastCard: function(n) {
        var me = this,
            cards = me.getView().down('container[region=east]');
            //Retrieves the first descendant of this container which matches the passed selector. 
            //The passed in selector must comply with an Ext.ComponentQuery selector, 
            //or it can be an actual Ext.Component.
        cards.setActiveItem(n);
    },

соответственно, при вызове setActiveEastCard(0) переключимся на текст, а setActiveEastCard(1) - на форму, которая предоставлена xtype 'mainform'.

Пример - https://fiddle.sencha.com/#view/editor&fiddle/2b2n


2. Как вернуть Grid вертикальный scrollbar, если он не mainView, а вложен в какой-нибудь tab?
тоже просто.
Для этого таб должен иметь layout: ' fit'
Пример - https://fiddle.sencha.com/#view/editor&fiddle/2b18


3. Как передать record при даблклике на строке в grid в окно/панель?

Для создаваемого окна нужно подготовить ViewModel, в котором сделать раздел data
Ext.define('Fiddle.view.DetailViewModel', {
    extend: 'Ext.app.ViewModel',
    alias: 'viewmodel.detailform',
    data : {
        currentRecord : null
    }
});
в окне получателе нужно установить viewModel : 'detailform' и для каждого поля приписать bind

    items: [
            {
                fieldLabel: 'Id',
                name: 'id',
                xtype: 'displayfield',
                bind: {
                    value: '{currentRecord.id}'
                }
             
            },
            {
                xtype: 'textfield',
                name: 'name',
                fieldLabel: 'ФИО',
                bind: {
                    value: '{currentRecord.name}'
                }
            },
    ],
далее, в контроллере при создании окна надо передать record

    onRowDbl:function(grid,record,index,opts){
        var wnd=Ext.create({
            xtype: 'clientEdit', //xtype вашего окна
        });
        wnd.getViewModel().set('currentRecord', record);
        wnd.show();
//следующая строка реализует автофокус - не знаю, 
//о чем сенча думает, но косяк уже не одну версию, 
//судя по форуму
        if(wnd.down('[autoFocus=true]')){wnd.down('[autoFocus=true]').focus();}
    },



Комментариев нет:

Отправить комментарий