当前位置: 首页 > 知识库问答 >
问题:

Sencha触摸后退按钮中的导航问题

国俊艾
2023-03-14

我尝试在sencha touch中创建导航。我遇到了一个我无法理解的情况。当我按下“后退”按钮时,请帮助我找出事件侦听器不工作的原因。

我已经创建了一个主容器,其中包含一个单独的位置,用于动态添加面板。

后退和下一步按钮位于主视图的另一个面板中。

当我的添加功能启动时,它会添加面板的功能,并在一次内正常工作。但当我导航通过后退按钮的功能是不工作即piccs点击,cvcs点击;其中一个图像被改变。还有其他一些功能

请帮助我了解问题和解决方案。

我猜是因为我正在创建一个面板,当我使用xtype点击back按钮时:“newPanel”会创建一个全新的面板,并且函数不会应用于该面板。请帮我解决这个问题。

下面是密码

 var current = 1;
 var myPanel = new Array("panelOne", "panelOneP", "panelTwoP", "panelThreeP", "panelFourP", "panelFiveP", "panelOneC", "panelTwoC", "panelThreeC", "panelFourCVC", "panelFiveC", "panelSixCGraph", "panelSixPGraph");

 Ext.define("myApp.controller.MainController", {
     extend: "Ext.app.Controller",

     config: {
         refs: {
             main: '#main',
             backButton: '#backButton',
             nextButton: '#nextButton',
             panelArea: '#panelArea', //this panel is in main view along with some other panels, among the other panels there is a panel which contains the back and next buttons
             panelOne: '#panelOne', // these are the views extending Ext.Panel
             panelOneP: '#panelOneP',
             panelTwoP '#panelTwoP',
             panelThreeP: '#panelThreeP',
             panelFourP: '#panelFourP',
             panelFiveP: '#panelFiveP',
             panelSixPGraph: '#panelSixPGraph',
             panelOneC: '#panelOneC',
             panelTwoC: '#panelTwoC',
             panelThreeC: '#panelThreeC',
             panelFourC: '#panelFourC',
             panelFiveC: '#panelFiveC',
             panelSixCGraph: '#panelSixCGraph',
             piccs: '#piccs', // these two are images in the panelOne
             cVCs: '#CVCs',
         },

         control: {
             cVCs: {
                 tap: 'cvcsClicked'
             },
             piccs: {
                 tap: 'piccsClicked'
             },
             backButton: {
                 tap: 'navigateBack'
             },
             nextButton: {
                 tap: 'navigateNext'
             },
         },
     },

     navigateBack: function () {
         current = current - 1;
         this.addPanel(myPanel[current]);
     },

     navigateNext: function () {
         current = current + 1;
         this.addPanel(myPanel[current]);
     },

     addPanel: function (newPanel) {

         this.getPanelArea().removeAt(0);

         }
         var myNewPanel = Ext.create('Ext.Panel', {
             items: [{
                 xtype: "" + newPanel + ""  // every view is given ID exactly as in the array
             }]
         });
         this.getPanelArea().add(myNewPanel);
     },

     piccsClicked: function () {
         var current = this.getPiccs().getSrc();
         if (current == 'resources/images/checkBoxUnchecked.jpg') {
             this.getPiccs().setSrc('resources/images/checkBoxChecked.jpg');
         } else {
             this.getPiccs().setSrc('resources/images/checkBoxUnchecked.jpg');
         }
     },

     cvcsClicked: function () {
         var current = this.getCVCs().getSrc();
         if (current == 'resources/images/checkBoxUnchecked.jpg') {
             this.getCVCs().setSrc('resources/images/checkBoxChecked.jpg');
         } else {
             this.getCVCs().setSrc('resources/images/checkBoxUnchecked.jpg');
         }
     },

 });

共有2个答案

施念
2023-03-14

小心你放逗号的地方,检查是否所有东西都用括号正确关闭了。

基本上,你不应该在结束括号前放入任何],就像你在结束时那样:

    },
});

或在“#CVCs”之后,

    cVCs: '#CVCs',
},

另外,您确定要将}、放在this.getPanelArea().add(myNewPanel)之后吗

    this.getPanelArea().add(myNewPanel);
},

这将关闭您的控制器定义,但您还有两个函数piccs点击cvcs点击,它们应该放在关闭},之前。

此外,关闭控制器应为}) },(可能意外地留在那里)。

var current = 1;
var myPanel = new Array("panelOne", "panelOneP", "panelTwoP", "panelThreeP", "panelFourP", "panelFiveP", "panelOneC", "panelTwoC", "panelThreeC", "panelFourCVC", "panelFiveC", "panelSixCGraph", "panelSixPGraph");

Ext.define("myApp.controller.MainController", {
    extend: "Ext.app.Controller",

    config: {
        refs: {
            main: '#main',
            backButton: '#backButton',
            nextButton: '#nextButton',
            panelArea: '#panelArea', //this panel is in main view along with some other panels, among the other panels there is a panel which contains the back and next buttons
            panelOne: '#panelOne', // these are the views extending Ext.Panel
            panelOneP: '#panelOneP',
            panelTwoP '#panelTwoP',
            panelThreeP: '#panelThreeP',
            panelFourP: '#panelFourP',
            panelFiveP: '#panelFiveP',
            panelSixPGraph: '#panelSixPGraph',
            panelOneC: '#panelOneC',
            panelTwoC: '#panelTwoC',
            panelThreeC: '#panelThreeC',
            panelFourC: '#panelFourC',
            panelFiveC: '#panelFiveC',
            panelSixCGraph: '#panelSixCGraph',
            piccs: '#piccs', // these two are images in the panelOne
            cVCs: '#CVCs'
        },

        control: {
            cVCs: {
                tap: 'cvcsClicked'
            },
            piccs: {
                tap: 'piccsClicked'
            },
            backButton: {
                tap: 'navigateBack'
            },
            nextButton: {
                tap: 'navigateNext'
            }
        }
    },

    navigateBack: function () {
        current = current - 1;
        this.addPanel(myPanel[current]);
    },

    navigateNext: function () {
        current = current + 1;
        this.addPanel(myPanel[current]);
    },

    addPanel: function (newPanel) {
        this.getPanelArea().removeAt(0);
    },
 
    var myNewPanel = Ext.create('Ext.Panel', {
        items: [{
            xtype: "" + newPanel + ""  // every view is given ID exactly as in the array
        }]
    });

    this.getPanelArea().add(myNewPanel);

    piccsClicked: function () {
        var current = this.getPiccs().getSrc();
        if (current == 'resources/images/checkBoxUnchecked.jpg') {
            this.getPiccs().setSrc('resources/images/checkBoxChecked.jpg');
        } else {
            this.getPiccs().setSrc('resources/images/checkBoxUnchecked.jpg');
        }
    },

    cvcsClicked: function () {
        var current = this.getCVCs().getSrc();
        if (current == 'resources/images/checkBoxUnchecked.jpg') {
            this.getCVCs().setSrc('resources/images/checkBoxChecked.jpg');
        } else {
            this.getCVCs().setSrc('resources/images/checkBoxUnchecked.jpg');
        }
    }
});

阎令
2023-03-14

我也有同样的问题。我这样做解决了这个问题:

>

backToNav: 'myNavXtypeName button[text=Back]'

在同一个控制器中,将ref链接到控件

backToNav: {
        tap: 'backToNav'
}

最后创建实现导航视图的pop功能的控制器方法。

backToNav: function() {
        Ext.getCmp('myNavXtypeName').pop()
}

完成。在此处阅读有关参照和控件的更多信息

 类似资料:
  • 我开始创建一个应用程序,它使用一个活动(导航抽屉)和许多片段。但我无法使用工具栏上的“后退”按钮从片段中导航回来。硬件后退按钮工作正常。我知道我需要覆盖选项ItemSelected,捕捉android。R、 id.home,检查后堆栈中是否有内容,然后弹出它。在更改片段后,“burger”按钮变为“back arrow”,但当我单击它时,选项ItemSelected将打开NavigationDra

  • 在我的应用程序中,我使用动作栏和导航抽屉。操作栏中有一个按钮用于打开和关闭导航抽屉。我想把它的颜色改成红色。我该怎么做?

  • 我想知道如何使用导航控制器正确处理系统后退按钮动作。在我的应用程序中,我有两个片段(例如,fragment1和fragment2),我在fragment1中有一个操作,目标是fragment2。除了一件事之外,所有的工作都很好--当用户按下fragment2中的system back按钮时,我希望显示一个对话框(例如使用DialogFragment)来确认退出。实施这种行为的最佳方式是什么?如果我

  • 问题内容: 我正在使用react native导航(react- navigation)StackNavigator。它从应用程序整个生命周期的“登录”页面开始。我不想使用返回选项,返回“登录”屏幕。有谁知道登录屏幕后如何将其隐藏在屏幕上?顺便说一句,我也使用以下命令将其隐藏在登录屏幕中: 问题答案: 1)要使后退按钮在react-navigation v2或更高版本中消失: 2)如果您要清理导航

  • 在本地MacOS应用程序的触摸栏中创建一个按钮 进程: 主进程​ new TouchBarButton(options) 实验功能 用途:创建新按钮 options Object label String (可选) - 按钮文本 backgroundColor String (可选) - 十六进制的按钮背景颜色如 #ABCDEF icon NativeImage (可选) - 按钮图标 iconP

  • 我正在使用android中的导航组件,最初我在其中设置了6个片段。问题是我添加了一个新片段(ProfileFragment)。 当我从开始目标导航到此新片段时,按下本机后退按钮不会弹出当前片段。相反,它只是停留在我所在的片段上——后退按钮什么都不做。 这是我的navigation.xml: 在上图中,突出显示的箭头(左侧)是我遇到问题的导航操作。 在我的片段代码中,我导航如下: 其他导航操作正在按