当用户按下屏幕上的按钮时,我有一个带有几个级别的嵌套列表。当nestedList出现时,没有后退按钮(因为我们位于树的顶部,所以可以理解的是无处可去),而点击列表中的项目会带您进入带后退按钮的屏幕。 / p>
我想在第一个屏幕上添加一个后退按钮。我已经设法做到了这一点,但是没有在nestedList中的每个子列表中添加相同的后退按钮 - 这在顶层有1个后退按钮和2个后退按钮(一个完全带你离开nestledList,在每个后续级别都有一个级别。
任何人都可以帮我弄清楚如何在每个屏幕上设置1个后退按钮,包括关闭列表的顶级按钮?
非常感谢
PS目前我正在使用的一个讨厌的解决方法是在每个屏幕的右上角都有一个“关闭”按钮。
答案 0 :(得分:4)
我不知道你对Sencha Touch的内部运作感到多么舒服,所以你如何做到这一点取决于你 -
当显示嵌套列表(在带有hidden: true
的initComponent函数中创建)时,后退按钮隐藏在那里,然后onBackTap,onItemTap和setActivePath将在其函数末尾附近调用syncToolbar,这是当你的深度为0时隐藏后退按钮。
所以你需要做两件事,首先是initComponent,这很简单 - 只需在你的nestedList中实现initComponent,调用超类'initComponent,然后设置backButton可见
var myNestedList = new Ext.NestedList({
...,
initComponent: function() {
myNestedList.superclass.initComponent.call(this);
this.backButton.setVisible(true);
},
...
});
它负责显示它。你如何处理修复syncToolbar取决于你。您可以使用Ext.override,您可以直接将整个syncToolbar函数复制并粘贴到您的nestedList对象中,该对象也会覆盖它,或者您可以执行您被告知永远不会执行的操作并直接编辑sencha-touch.js文件。无论你决定这样做,你想要改变的是
syncToolbar: function(card) {
...
backToggleMth = (depth !== 0) ? 'show' : 'hide';
if (backBtn) {
backBtn[backToggleMth]();
if (parentNode) {
backBtn.setText(backBtnText);
}
}
... };
您可以将backToggleMth
更改为= 'show'
,也可以一起删除if (backBtn {...}
。
答案 1 :(得分:0)
在Sencha Touch 2.2中,我不得不使用不同的代码:
Ext.create('Ext.NestedList', {
...,
listeners: {
initialize: function(obj) {
obj.getBackButton().show();
},
back: function(obj, node, lastActiveList, detailCardActive) {
switch(node.getDepth()) {
case 1:
obj.getBackButton().show();
break;
case 0:
alert("wohooooooo!");
break;
}
}
}
}