如何在Sencha Touch中切换视图?目前我正在显示一个新视图,但它看起来像是覆盖在现有视图上。我想我需要隐藏前一个或破坏它。我在考虑使用Ext.getCmp("noteslist")
,但在尝试获取当前容器时会返回'undefined'。这是在视图之间导航的推荐方法还是有更好的方法?
应用
Ext.application({
name: "NotesApp",
controllers: ["NotesController", "TestController"],
views: ["NotesListContainer"],
launch: function () {
var notesListContainer = Ext.create("NotesApp.view.NotesListContainer");
Ext.Viewport.add(notesListContainer);
}
});
控制器:
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"
}]
}]
}
答案 0 :(得分:6)
使用Ext.Viewport.add只能将组件添加到视口,但不能将其设置为活动项。您可以使用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);
如果要为视图之间的切换设置动画,请使用animateActiveItem(list,{type:'slide',direction:'right'})而不是setActiveItem。
这是你如何使用Ext.Viewport和任何带卡布局的容器。在真实的应用程序视图中,可以在app的一部分(在控制器中,在应用程序中,在视图中)创建,并在其他部分中设置为活动。在这种情况下,您需要以任何方式获取列表的链接并在setActiveItem中使用它。
答案 1 :(得分:1)
有两种技术1使用setActiveItem,另一种使用导航视图......
设置活动项目方法:
var view=Ext.Viewport.add({xtype: 'testlist'});
Ext.Viewport.setActiveItem(view);
view.show(); //This is additionally done to fire showAnimation