EXTJS Сегментированная кнопка в привязке виджета-столбца не работает - PullRequest
0 голосов
/ 10 июля 2019

У меня нет большого опыта в extjs. У меня есть сетка со столбцами, созданными на лету из JSON. Эта сетка имеет столбец виджетов. Виджет представляет собой сегментированную кнопку.

Что мне нужно, так это изменить свойство «нажатых» кнопок, используя данные внутри модели вида сетки. Я пробовал несколько способов и не повезло.

В этой теме работает с одной кнопкой, но мне нужно использовать ее почти с 10 кнопками. Extjs 6.5.3 Связывание скрытого свойства виджета-столбца из значений записи

Вот как я генерирую сегментированную кнопку

function getListaEtiquetas(){
///conection code
while ($etiqueta = $conexion->fetchObject($resultado)) {

    array_push($listaEtiquetas, 
                   array(
                        'text' => utf8_encode($etiqueta->tipe_nombre),
                        'value' => $etiqueta->tipe_codigo,
                        'toolTip' => utf8_encode($etiqueta->tipe_descripcion),
                        'bind' => array('pressed' => "{record.E$etiqueta->tipe_codigo}", 'text' => '{listadoRespuestas.record.esen_codigo}')
                    )
                );
            }
    }

function generateColumns()
///the rest of the grids columns
//this is how I generate widget column

array(
'text' => 'Etiquetas', 
'width' => 150, 
'align' => 'center',
'stopSelection' => true,
'locked' => true, 
'xtype' => 'widgetcolumn',
'cellWrap' => true,
'rowViewModel' => true,
'widget' => array(
   'xtype' => 'segmentedbutton',
                    'rowViewModel' => true,
                    'vertical' => 'true', 
                    'ui' => 'decline',
                    'allowMultiple' => 'true',
                    'items' => getListaEtiquetas(),
                    'listeners' => array('toggle' => 'onClickTag')
                )
}

А сетка и модель представления

Ext.define('Eodd.view.listado.ListadoEncuestas', {
    extend: 'Ext.grid.Panel',
    id : 'grdEncuestas',
    title: 'Listado encuestas',
    requires: [
        'Eodd.viewmodel.ListaRespuestas'
    ],
    viewModel: {
        type: 'ListaRespuestas'
    },
    bind: '{Encuestas}',
    renderTo: Ext.getBody(),
    xtype: 'grid',
    grouped: true,
    disableSelection: true,
    autoScroll : true,
    height: 420,
    reference: 'listadoRespuestas',
    columnLines: true,
    margin: "10 10 10 10",
    //store: 'eoddEncuestas',
    default: {width: 60},
    rowViewModel: true,
    dockedItems: 
    [{
        xtype: 'pagingtoolbar',
        dock: 'bottom',
        store: 'eoddEncuestas',
        itemId: 'eoddPaginacionRespuestas',
        displayInfo: true,
        displayMsg: 'Mostrando {0} - {1} respuestas de {2}',
        emptyMsg: "Sin resultados"
    }]
});

Ext.define('Eodd.viewmodel.ListaRespuestas', {
    extend: 'Ext.app.ViewModel',
    alias: 'viewmodel.ListaRespuestas',
    model: 'Encuestas',
    stores: {
        Encuestas: {
            extend: 'Ext.data.Store',
            storeId: 'eoddEncuestas',
            alias: 'store.eoddEncuestas',
            model: 'Eodd.model.Encuesta',   
            autoLoad: true,
            pageSize: 20,
            remoteSort: true,
            remoteFilter: true,
            proxy: {
                type: 'ajax',
                enablePaging : true,
                url: 'data/encuestas.php',
                extraParams: {
                    o : 'respuestas'
                },
                reader:
                {
                    type: 'json',
                    rootProperty: 'data',
                    successProperty : 'success',
                    totalProperty: 'total'
                }
            }
        }
    },

});

Сетка работает как раз правильно, но я могу получить нажатие кнопок изменения состояния. Я искал около 3 дней. Я действительно не знаю, что я делаю неправильно.

Заранее спасибо!

...