Sencha Touch 2按钮松动听众

时间:2012-03-24 12:36:08

标签: extjs sencha-touch-2

我在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 个答案:

答案 0 :(得分:3)

这是因为控制器中的“ref”正在使用按钮的id来创建ref。相反,为按钮使用不同的选择器。例如,您可以为按钮指定“name”属性,并为其指定值“testbutton”。然后你的参考就像

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

对于在整个应用程序流程中多次创建/销毁的按钮和列表项,我遇到了同样的问题。从那以后我读过几次,一般来说,Sencha Touch团队建议不要使用id作为选择器,除非你有特定的理由。上面的“名称”方法对我来说效果很好。你也可以使用很多其他的css风格选择器(你必须单独阅读)。

正如之前的评论所述,我会接受一些答案,以增加将来回答问题的可能性。我只是回答这个问题因为我在这个问题上撞了我的头四个小时。

答案 1 :(得分:1)

Sencha的例子建议在按钮上使用动作配置,比如'取消','goHome','createPost'等等。哪种方式有意义。
所有引用都是以下形式的:myContainer按钮[action = myAction]

答案 2 :(得分:0)

我相信您的问题正是id参数。如果你曾经添加任何id,你应该确保它是唯一的,因此在自定义视图的配置中添加一个id将导致无法再创建一个它的实例!我可能不是100%正确(可能在容器内,但我相信它会导致问题)但为什么你想要一个id那么多?此外,您可以通过xtype:

简单地引用您的视图
refs: {homeView: 'homeview',backBtn: 'btn_test1'},

的问候,