Extjs Sencha视图在单击事件时不更改

Extjs Sencha视图在单击事件时不更改,extjs,sencha-touch,sencha-touch-2,Extjs,Sencha Touch,Sencha Touch 2,我正在尝试使用Ext.Ajax从Sencha开发一个名为REST Servive的应用程序 我成功地获得了响应,但是当我尝试加载不同的视图时,什么都没有发生 我已经参考了 App.js Ext.Msg.alert('title', 'Failure'); Ext.Viewport.add(Ext.create('epsoft.view.admin')); 外部应用程序({ 名称:“epsoft” requires: [ 'Ext.MessageBox', 'Ext.Ajax',

我正在尝试使用Ext.Ajax从Sencha开发一个名为REST Servive的应用程序

我成功地获得了响应,但是当我尝试加载不同的视图时,什么都没有发生

我已经参考了

App.js

Ext.Msg.alert('title', 'Failure');
Ext.Viewport.add(Ext.create('epsoft.view.admin'));
外部应用程序({ 名称:“epsoft”

requires: [
    'Ext.MessageBox',
    'Ext.Ajax',
    'Ext.Container'
],

views: [
    'Main','admin','login',
],

launch: function() {
    // Destroy the #appLoadingIndicator element
    Ext.fly('appLoadingIndicator').destroy();

    // Initialize the main view
    Ext.Viewport.add(Ext.create('epsoft.view.login'));
},
)}

在LoginController.js下

Ext.Msg.alert('title', 'Failure');
Ext.Viewport.add(Ext.create('epsoft.view.admin'));

Msg弹出窗口显示正常,但新视图未加载。

我不确定这是否正确,但我尝试了以下方法:

假设您的login.js在配置部分下有id,类似于下面的示例:

Ext.define('epsoft.view.login', {
    extend: 'Ext.Container',
    xtype: 'login',
    config: { 
        id: 'loginForm', // here is ID
        items: [ 
                     . . . 
               ]
     }
});
然后在您的loginController.js下,您可以通过以下方式启动新视图:

 var paneltab = Ext.create('epsoft.view.admin'); //Mention the view name to launch
 Ext.getCmp('loginForm').destroy(); // Destroying the ID
 Ext.Viewport.add(paneltab); // add to the ViewPort

希望它有用。

您应该将新视图设置为viewport的activeitem,请尝试以下操作

setActiveItem(Ext.Viewport.add({xtype:'admin'}))


这里我假设admin是您下一个视图的X类型。

谢谢,Ram,这也可以。但是你能告诉我两者的区别吗??这将帮助我更好地理解。这是推荐的方法,使用viewport为您尝试创建的视图添加div标记,这是我们两个答案的共同点,但在您的情况下,您要显示的视图位于背景中,您正在破坏当前视图(当前视口的活动项)显示您刚刚创建的视图。这种方法的问题是当您试图返回时,在这种情况下,您无法返回,因为您已经破坏了返回时希望显示的视图。我希望我是清楚的,如果不是,我会进一步澄清