Sencha Touch 2 кнопки прослушивания - PullRequest
4 голосов
/ 24 марта 2012

У меня есть кнопка в проекте Sencha Touch 2. Кнопка разрушается с видом после нажатия и восстанавливается после нажатия другой кнопки.

Но кнопка снова не получает слушателя.

слушатель встроен в контроллер представления.

 Ext.application({
 name: 'App',
 controllers: ['Main','Home'],
 views: ['Main','Home'],
 launch: function () {Ext.Viewport.add({xtype:'mainview'});} 
 });

контроллер

Ext.define('App.controller.Home', {extend: 'Ext.app.Controller',
config: {
    refs: {homeView: '#homeview',backBtn: '#btn_test1'},
    control: {
        backBtn: {
             tap: function(backBtn){
                console.log('[Controller][Home] btn monatsrate - - tap');
                 Ext.Viewport.add({xtype: 'mainview'});
                 Ext.Viewport.setActiveItem(1);
             }
        },
        homeView: {
            deactivate: function (homeView){
                console.log('[Controller][Home] autodestroy homeview');
                //homeView.destroy();
                Ext.Viewport.remove(homeView);
            }
        }
    }

},
});

И вид

Ext.define("App.view.Main", {
extend:"Ext.Container",
xtype:"mainview",
config:{
    id:'mainview',
    items:[
        {
            xtype:'button',
            id:'btn_test2',
            text: 'test2'
        }
    ]
},

});

Есть идеи, как разрешить кнопке вернуть слушателя обратно?

Ответы [ 3 ]

3 голосов
/ 06 мая 2012

Это потому, что «ref» в вашем контроллере использует идентификатор кнопки для создания ссылки.Вместо этого используйте другой селектор для своей кнопки.Например, вы можете присвоить кнопке свойство name и присвоить ей значение testbutton.Тогда ваша ссылка будет выглядеть как

refs: {homeView: '#homeview',backBtn: 'button[name=testbutton]'},

Я боролся с этой же проблемой для кнопок и элементов списка, которые создавались / уничтожались много раз в течение всего потока приложения.С тех пор я несколько раз читал, что, как правило, команда Sencha Touch рекомендует не использовать идентификатор в качестве селектора, если у вас нет особых причин для этого.Метод "name", описанный выше, очень хорошо работает для меня.Вы также можете использовать множество других селекторов в стиле css (вам придется прочитать об этом отдельно).

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

1 голос
/ 16 мая 2012

Примеры Sencha рекомендуют использовать конфигурацию действий для кнопок, таких как «отмена», «goHome», «createPost» и т. Д., Что в некотором роде имеет смысл.
Все ссылки тогда имеют вид: myContainer button [action = myAction]

0 голосов
/ 15 мая 2012

Я считаю, что ваша проблема - это именно параметр id.Если вы когда-либо добавляете какой-либо идентификатор, вы должны убедиться, что он уникален, поэтому добавление идентификатора в конфигурацию вашего пользовательского представления никоим образом не приведет к созданию более одного его экземпляра!Возможно, я не на 100% прав (может быть, внутри контейнера, но я верю, что это все равно вызовет проблемы), но зачем вам такой идентификатор?Кроме того, вы можете просто ссылаться на свой вид по xtype:

refs: {homeView: 'homeview',backBtn: 'btn_test1'},

regards,

...