Как отключить определенную строку в Picker в Sencha Touch

Я создал сборщик в Sencha touch 2.1. Мои данные отображаются правильно. Я хочу отключить конкретное значение, а не все, чтобы, если я выберу это значение и нажму "doneButton", его не нужно было использовать.

Пример:

function loadPicker(paramName, valueSet) {
    Ext.Viewport.remove(Ext.getCmp(paramName + 'Pickerfield'), true);
    if (!paramName.picker) {
        paramName.picker = Ext.Viewport.add({
            xtype: 'picker',
            id: paramName + 'Pickerfield',
            useTitles: true,
            slots: [{
                name: paramName,
                title: paramName,
                data: valueSet
            }],

            doneButton: {
                listeners: {
                    tap: function(button, event, eOpts) {
                        var selectedPacingModeValue =
                            Ext.getCmp(paramName + 'Pickerfield').getValue()[paramName];
                        sendSetPendingRequest(paramName, selectedPacingModeValue);
                    }
                }
            }
        });
    }
}

давайте возьмем это значения в моем поле выбора. Что я делаю при выборе значения и нажатии кнопки «doneButton», я показываю значение в текстовом поле. Я хочу, чтобы если я выберу "option 2" и нажму "doneButton", тогда option 2 не должен отображаться в текстовом поле, но для все другие значения, которые этот выбор и отображение в операции с текстовым полем должны работать.


person Fabre    schedule 13.05.2013    source источник
comment
это не совсем понятно... у вас есть поле выбора, текстовое поле и кнопка "Готово"? Вы хотите, чтобы некоторые параметры отображались в текстовом поле (без отключенного флага), а некоторые не отображались в текстовом поле (с отключенным флагом)? Разве вы не можете просто получить выбранную запись и проверить этот флаг при нажатии кнопки «Готово», а затем перейти в текстовое поле (или нет)?   -  person VDP    schedule 13.05.2013
comment
У меня есть текстовое поле и средство выбора с кнопкой "Готово". Да, это именно то, что я хочу сделать в соответствии с отключенным флагом.   -  person Fabre    schedule 13.05.2013
comment
Я сформулирую пример в качестве ответа;)   -  person VDP    schedule 13.05.2013
comment
да, это было бы полезно :)   -  person Fabre    schedule 13.05.2013


Ответы (1)


Вы можете просто получить выбранную запись и проверить этот флаг при нажатии кнопки «Готово», а затем перейти в текстовое поле (или нет).

Ext.create('Ext.form.Panel', {
    fullscreen: true,
    items: [
        {
            xtype: 'fieldset',
            title: 'Select',
            items: [
                {
                    xtype: 'selectfield',
                    itemId: 'mySelectField',
                    label: 'Choose one',
                    options: [
                        {
                            text: 'apple',
                            value: 50
                        }, {
                            text: 'orange',
                            value: 100,
                            disabled: true
                        }, {
                            text: 'banana',
                            value: 200
                        }, {
                            text: 'papaya',
                            value: 300
                        }
                    ]
                },
                {
                    xtype: 'button',
                    text: 'done',
                    handler: function(button){
                        var panel = button.up(),
                            sf = panel.down('#mySelectField'),
                            tf = panel.down('#answerfield');

                        /* you can only access the raw value unless you use
                         * an actual store and an actual model with the 
                         * disabled field. In that case you can do
                         * sf.getRecord().get('disabled')
                         */ 
                        if(sf.getRecord().raw.disabled === true){
                            tf.setValue(''); //noting to see :)
                        } else {
                            tf.setValue(sf.getRecord().get('text')); //display value
                        }
                    }
                },
                {
                    xtype: 'textfield',
                    itemId: 'answerfield',
                    title: 'answer'
                }
            ]
        }
    ]
});

Рабочая скрипка: http://www.senchafiddle.com/#d46XZ

ОБНОВЛЕНИЕ Как вы и просили: со сборщиком

Ext.Loader.setConfig({
    enabled: true
});

Ext.application({
    name: 'SenchaFiddle',

    launch: function() {
        var picker = Ext.create('Ext.Picker', {
            slots: [
                {
                    name : 'stuff',
                    title: 'Stuff',
                    data : [
                        {
                            text: 'apple',
                            value: 50
                        }, {
                            text: 'orange',
                            value: 100,
                            disabled: true
                        }, {
                            text: 'banana',
                            value: 200
                        }, {
                            text: 'papaya',
                            value: 300
                        }
                    ]
                }
            ],
            listeners: {
                change: function(p, value){
                    var tf = panel.down('#answerfield'),
                        firstSlot = p.getItems().get(1), //index 0 is the toolbar 1 first slot and so on..
                        selectedRecord = firstSlot.getData()[firstSlot.selectedIndex];
                    if(selectedRecord.disabled === true){
                        tf.setValue(''); //noting to see :)
                    } else {
                        console.log(selectedRecord);
                        tf.setValue(selectedRecord.text); //display value
                    }
                }
            }
        });
        var panel = Ext.create('Ext.form.Panel', {
            fullscreen: true,
            items: [
                {
                    xtype: 'fieldset',
                    title: 'Select',
                    items: [
                        {
                            xtype: 'button',
                            text: 'show picker',
                            handler: function(button){
                                Ext.Viewport.add(picker);
                                picker.show();
                            }
                        },
                        {
                            xtype: 'textfield',
                            itemId: 'answerfield',
                            title: 'answer'
                        }
                    ]
                }
            ]
        });


    }
});

рабочая скрипка: http://www.senchafiddle.com/#SFgpV

person VDP    schedule 13.05.2013
comment
Это действительно хороший пример VDP. Но мой код немного отличается. Я получаю свои значения динамически, и я не использую поле выбора... Я отредактировал свой рабочий код выше этого примера... пожалуйста, посмотрите на него - person Fabre; 13.05.2013