sencha-touch - 如何使用 Sencha Touch 切换 View 容器?

标签 sencha-touch sencha-touch-2

如何在 Sencha Touch 中切换 View ?目前我有一个正在显示的新 View ,但它看起来像是覆盖在现有 View 上。我想我需要隐藏以前的或摧毁它。我正在考虑使用 Ext.getCmp("noteslist") 但在尝试获取当前容器时会返回“undefined”。这是在 View 之间导航的推荐方式还是有更好的方式?

应用

Ext.application({
    name: "NotesApp",
    controllers: ["NotesController", "TestController"],
    views: ["NotesListContainer"],

    launch: function () {

        var notesListContainer = Ext.create("NotesApp.view.NotesListContainer");
        Ext.Viewport.add(notesListContainer);
    }
});

Controller :

Ext.define("NotesApp.controller.NotesController", {
    extend: "Ext.app.Controller",
    views: [        
        "TestListContainer"
    ],
    config: {
        refs: {
            newNoteBtn: "#new-note-btn",
            saveNoteBtn: "#save-note-btn",
        },
        control: {
            newNoteBtn: {
                tap: "onNewNote"
            },          
            saveNoteBtn: {
                tap: "onSaveNote"
            }
        }
    },
    onNewNote: function () {
        console.log("onNewNote");
    },
    onSaveNote: function () {
        console.log("onSaveNote");      
        Ext.Viewport.add({xtype:'testlist'}).show();    
            // How do I remove the current one?....         
    },
    launch: function () {
        this.callParent();
        console.log("launch");
    },
    init: function () {
        this.callParent();
        console.log("init");
    }
});

查看

Ext.define("NotesApp.view.NotesListContainer", {
    extend: "Ext.Container",   
    config: {
        items: [{
            xtype: "toolbar",
            docked: "top",
            title: "My Notes",
            items: [{
                xtype: "spacer"
            }, {
                xtype: "button",
                text: "New",
                ui: "action",
                id:"new-note-btn"
            }, {
                xtype: "button",
                text: "Save",
                ui: "action",
                id:"save-note-btn"
            }]
        }]
    }

最佳答案

使用 Ext.Viewport.add 你只是将组件添加到视口(viewport),而不是将其设置为事件项。您可以使用 Ext.Viewport.setActiveItem 添加组件并在一次调用中将其设置为事件项。

例子:

//1
Ext.Viewport.setActiveItem({xtype:'testlist'});

//or 2
//Create and add to viewport
Ext.Viewport.add({xtype:'testlist'});
//set active item by index
Ext.Viewport.setActiveItem(1);

//or 3
var list = Ext.create('NotesApp.view.NotesListContainer', {id : 'noteList'});
Ext.Viewport.add(list);
 .....
//In place where you need to show list
Ext.Viewport.setActiveItem(list);

如果您想在 View 之间设置动画切换,请使用 animateActiveItem(list, {type: 'slide', direction: 'right'}) 而不是 setActiveItem。

这就是您如何使用 Ext.Viewport 和任何具有卡片布局的容器。在真实的应用程序中, View 可以在应用程序的一部分(在 Controller 中,在应用程序中,在 View 中)创建,并在其他部分设置为事件。在这种情况下,您需要通过任何方式获取到列表的链接并在 setActiveItem 中使用它。

关于sencha-touch - 如何使用 Sencha Touch 切换 View 容器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13585171/

相关文章:

java - Sencha touch 无法使用 Cordova 构建

extjs - 如何在没有互联网连接时提醒用户

javascript - XTemplate 与 Sencha Touch 中的数组相同级别

javascript - Sencha Touch - 无法从其他函数获取值

sencha-touch-2 - Sencha Touch 2 中选择器的上一个和下一个按钮

extjs - 嵌套列表返回按钮 sencha touch 2

javascript - 创建的应用程序无法通过 http ://localhost:1841/MyApp 访问

javascript - 如何在 Sencha 中按下分段按钮上的按钮

javascript - sencha touch 2 中未加载项目

javascript - Sencha 触摸2 : Reloading a treeStore in nestedList to reflect user selection