我在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'
}
]
},
});
知道如何让按钮让听众回来吗?
答案 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'},
的问候,