Обработка событий на переключателях в Sencha Touch - PullRequest
0 голосов
/ 27 апреля 2011

Я пытаюсь добавить немного кода, который вызывается всякий раз, когда пользователь нажимает одну из опций переключателя на панели в сенсорном Сенча.У меня это работает, добавив прослушиватель щелчков в тело панели и просто проверив цель и убедившись, что это переключатель (имеет значение).

Я уверен, что есть лучший способ связать этообработчик.Я смотрел некоторые уроки о слушателях и из того, что я понимаю, «я делаю это неправильно».Но где я могу найти информацию о том, как сделать это правильно?Вот урезанная версия того, что я делаю, которая работает с использованием Sencha Touch 1.1.0 (это файл javascript приложения):

Ext.setup({
    onReady: function() {
        panel = new Ext.Panel({
            fullscreen: true,
            title: 'Test',
            scroll: 'vertical',
            items: [{
                xtype: 'fieldset',
                defaults: {
                    xtype: 'radiofield',
                    labelWidth: '80%',
                    name: 'opt',
                },
                items: [{label: 'first', value: 1}, {label: 'second', value: 2}]
            }],
        });

        panel.addListener({
            body: {
                click: function(ctl) {
                    if (ctl && ctl.target && ctl.target.value) {
                        console.log('checked control ' + ctl.target.value);
                    }
                }
            }
        });
    }
});

Я предполагаю, что я должен делать привязку кнабор полей вместо тела и, вероятно, прослушивание события изменения вместо события щелчка.Но все формы, которые я пробовал, кроме этой, похоже, не работают.

Ответы [ 3 ]

1 голос
/ 30 апреля 2011

Я работал над версией, которая выглядит следующим образом:

panel = new Ext.Panel({
    fullscreen: true,
    title: 'Test',
    scroll: 'vertical',
    items: [{
        xtype: 'fieldset',
        defaults: {
            xtype: 'radiofield',
            labelWidth: '80%',
            name: 'opt',
        },
        items: [{label: 'first', value: 1}, {label: 'second', value: 2}]
    }],
    listeners: {
        el: {
            tap: function(ctl) {console.log("Checked " + ctl.target.value);},
            delegate: "input",
        }
    },
});

Я подозреваю, что есть способ прикрепить это к элементу fieldset вместо панели, но это намного лучше, чем альтернативы, которые я имел. Мне больше не нужно проверять целевой элемент, переданный в обработчик события click, чтобы увидеть, был ли это переключатель, об этом позаботился параметр делегата. И теперь обработчик работает надлежащим образом, когда я динамически добавляю элементы в набор полей.

0 голосов
/ 22 октября 2011

Вы можете добавить прослушиватель (и) в раздел по умолчанию исходного скрипта, например:

xtype: 'radiofield',  
        listeners: {  
            check: function() {   
            alert(this.value);  
            }  
        },  
0 голосов
/ 27 апреля 2011

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

items: [{
    label: 'first',
    value: 1,
    listeners: {
        check: function(button) {
            console.log('...');
        }
    }
}, {
    label: 'second',
    value: 2,
    listeners: {
        check: function(button) {
            console.log('...');
        }
    }
}]
...