更改视图原生应用 Sencha Touch

Posted

技术标签:

【中文标题】更改视图原生应用 Sencha Touch【英文标题】:Change view native app Sencha Touch 【发布时间】:2013-05-30 13:27:17 【问题描述】:

我创建了一个非常简单的应用程序来测试带有 Sencha Touch 的原生 android 应用程序。我有两个面板。在第一个面板中点击按钮时,必须打开第二个面板。在我的浏览器中效果很好,但是当我创建一个原生 Android 应用程序时,只显示初始视图。当我点击按钮时,不会显示第二个视图。

这是我的代码:

Ext.application(
views: [
    'MyPanel',
    'MyPanel1'
],
controllers: [
    'MyController1'
],
name: 'MyApp',

launch: function() 

    Ext.create('MyApp.view.MyPanel', fullscreen: true);
 );

Ext.define('MyApp.view.MyPanel', 
extend: 'Ext.Panel',
alias: 'widget.mypanel',

config: 
    items: [
        
            xtype: 'button',
            itemId: 'mybutton',
            text: 'V1'
        
    ],
    listeners: [
        
            fn: 'onMybuttonTap',
            event: 'tap',
            delegate: '#mybutton'
        
    ]
,

onMybuttonTap: function(button, e, eOpts) 
    this.fireEvent('getPan1');

);


Ext.define('MyApp.view.MyPanel1', 
extend: 'Ext.Panel',
alias: 'widget.mypanel1',

config: 
    items: [
        
            xtype: 'button',
            itemId: 'mybutton1',
            text: 'V2'
        
    ],
    listeners: [
        
            fn: 'onMybutton1Tap',
            event: 'tap',
            delegate: '#mybutton1'
        
    ]
,

onMybutton1Tap: function(button, e, eOpts) 
    this.fireEvent('getPan');


);

Ext.define('MyApp.controller.override.MyController1', 
override: 'MyApp.controller.MyController1',

config: 
    refs: 
        myView: 'mypanel',
        myView2: 'mypanel1'
    ,
    control: 
        myView: 
            getPan1: 'getPan1'
        ,
        myView2: 
            getPan: 'getPan'
        
    
,

getPan1: function()
    var a = Ext.create('MyApp.view.MyPanel1', fullscreen: true);
    a.show();
,

getPan: function()
    var a = Ext.create('MyApp.view.MyPanel', fullscreen: true);
    a.show();

);

在我看来,在本机应用程序中,事件未在控制器中捕获。我做错了什么?

【问题讨论】:

【参考方案1】:

试试这个按钮代码:


    xtype : 'button'
    id : 'mybutton',
    text : 'V1',
    listeners : 
        tap : function()
            alert("tapped button");
        
    

或者如果您希望从控制器内部调用该函数(这始终是可取的),那么您的按钮代码将变为 ::


    xtype : 'button'
    id : 'mybutton',
    text : 'V1'

在你的控制器中你会得到以下内容

config : 
    refs : 
        mybutton1 : 'panelID button[text="V1"]'
    ,
    control : 
        mybutton1 : 
            tap : 'tappedButtonFunction
        
    
,

tappedButtonFunction : function()
    alert("tapped this button");
    // Do something

另外,在不使用覆盖的情况下尝试您的代码。它应该工作。我以前从未见过它,您可以覆盖自己的代码,而不仅仅是简单地编码。

【讨论】:

在浏览器中完美运行。但是在本机应用程序中,我没有收到来自控制器的警报。在视图中使用监听器的第一种情况适用于本机应用程序。 那么你不能像我给你的第一个选项那样在视图中使用监听器吗? 如果我在视图中使用监听器,那么我不能使用控制器。 我想我知道我做错了什么。我是否需要在文件中指定哪些视图/控制器/模型/商店都应该在包中? 不完全是。您知道如何在 Ext.Application 代码下的 app.js 文件中指定视图、控制器、模型、商店等的名称吗?好吧,您应该将这些视图/控制器/模型/存储的代码放入它们自己的文件夹中,并使用 Sencha 概述的文件夹结构。如果你不这样做,它们没有使用应用程序逻辑以正确的顺序加载,你的代码找不到它们。【参考方案2】:

app.js

Ext.application(
views: [
    'MyPanel',
    'MyPanel1'
],
controllers: [
    'MyController1'
],
name: 'MyApp',

launch: function() 
    console.log("appstart");
    Ext.create('MyApp.view.MyPanel', fullscreen: true);


);

app/controller/MyController1.js:

Ext.define('MyApp.controller.override.MyController1', 
override: 'MyApp.controller.MyController1',

config : 
    refs : 
        mybutton : 'mypanel button[text="V1"]'
    ,
    control : 
        mybutton : 
            tap : 'tappedButtonFunction'
        
    
,

tappedButtonFunction : function()
        console.log("Tapped");
        Ext.Msg.alert("Test");
        // Do something
    
);

app/view/MyPanel.js

Ext.define('MyApp.view.MyPanel', 
extend: 'Ext.Panel',
alias: 'widget.mypanel',

requires: [
    'Ext.MessageBox'
],

config: 
    id: 'PanelID',
    items: [
        
            xtype: 'button',
            id: 'mybutton',
            text: 'V1'
        
    ]


);

但是控制器在原生应用中没有捕获到事件。

【讨论】:

以上是关于更改视图原生应用 Sencha Touch的主要内容,如果未能解决你的问题,请参考以下文章

如何单独使用 Sencha touch 2 访问原生 iOS 文件系统

Sencha Touch 原生可选功能与所需权限(Nexus 7 上的相机)

集成谷歌地图时,sencha touch 应用程序仍处于蓝色加载屏幕

我应该使用 Sencha Touch 还是 Native 来编写我的应用程序? [关闭]

PhoneGap & Sencha Touch 2 载入画面

带有 Facebook 身份验证的 Native Sencha Touch 应用程序