gpt4 book ai didi

javascript - Sencha Touch MVC 的问题

转载 作者:行者123 更新时间:2023-11-28 10:13:57 25 4
gpt4 key购买 nike

我正在尝试学习如何使用 Sencha Touch 构建网络应用程序。我一直在关注教程Here我有点卡住了。下面创建了一个 Controller 、两个 View 和一个模型(所有其他代码都是从教程中复制和粘贴的)。第一个 View ,索引效果很好。但是,如果我尝试访问第二个,它会显示一个空白页面,所有工具栏按钮都不起作用,并且不会触发警报。

如果我注释掉 this.application.viewport.setActiveItem(this.editGyms); 行,警报将会触发,但显然,它不会呈现页面。

我看过其他几个教程,他们似乎也在使用 setActiveItem 成员来切换 View 。我是否遗漏了某些内容,或者我是否必须以某种方式停用第一个 View 激活第二个或其他什么?

HomeController.js

Ext.regController('Home', {

//Index
index: function()
{
if ( ! this.indexView)
{
this.indexView = this.render({
xtype: 'HomeIndex',
});
}
this.application.viewport.setActiveItem(this.indexView);
},
editGyms: function()
{
if ( ! this.editGyms)
{
this.editGyms = this.render({
xtype: 'EditGymStore',
});
}
this.application.viewport.setActiveItem(this.editGyms);
Ext.Msg.alert('Test', "Edit's index action was called!");
},
});

views/home/HomeIndexView.js

App.views.wodList = new Ext.List({
id: 'WODList',
store: 'WODStore',
disableSelection: true,
fullscreen: true,
itemTpl: '<div class="list-item-title"><b>{title}</b></div>' + '<div class="list-item-narrative">{wod}</div>'
});

App.views.HomeIndex = Ext.extend(Ext.Panel, {
items: [App.views.wodList]
});
Ext.reg('HomeIndex', App.views.HomeIndex);

views/home/EditGymStore.js

App.views.EditGymStore = Ext.extend(Ext.Panel, {
html: 'Edit Gyms Displayed Here',

});
Ext.reg('EditGymStore', App.views.EditGymStore);

模型/appModel.js

Ext.regModel('WOD', {
idProperty: 'id',
fields: [
{ name: 'id', type: 'int' },
{ name: 'date', type: 'date', dateFormat: 'c' },
{ name: 'title', type: 'string' },
{ name: 'wod', type: 'string' },
{ name: 'url', type: 'string' }
],
validations: [
{ type: 'presence', field: 'id' },
{ type: 'presence', field: 'title' }
]
});

Ext.regStore('WODStore', {
model: 'WOD',
sorters: [{
property: 'id',
direction: 'DESC'
}],
proxy: {
type: 'localstorage',
id: 'wod-app-localstore'
},
// REMOVE AFTER TESTING!!
data: [
{ id: 1, date: new Date(), title: '110806 - Title1', wod: '<br/><br/>Desc1</br><br/>' },
{ id: 1, date: new Date(), title: '110806 - Title1', wod: '<br/><br/>Desc2</br><br/>' }
]
});

带有工具栏的viewport.js

App.views.viewport = Ext.extend(Ext.Panel, {
fullscreen: true,
layout: 'card',
cardSwitchAnimation: 'slide',
scroll: 'vertical',
styleHtmlContent: true,
style: 'background: #d8e2ef',
dockedItems: [
{
xtype: 'toolbar',
title: 'The Daily WOD',
buttonAlign: 'right',
items: [
{
id: 'loginButton',
text: 'Login',
ui: 'action',
handler: function() {
Ext.Msg.alert('Login', "This will allow you to Login!");
}
},
{
xtype: 'spacer'
},
{
xtype: 'button',
iconMask: true,
iconCls: 'refresh',
ui: 'action',
handler: function() {
Ext.Msg.alert('Refresh', "Refresh!");

}
}]
},
],
});

感谢您的帮助!!

最佳答案

在 HomeController.js 中,您的操作函数 (editGyms) 与您用于 View 的变量 (this.editGyms) 同名,因此当它尝试时到 setActiveItem(this.editGyms) 它实际上传递的是 Controller 操作函数而不是 this.render({...})

更改 Controller 操作的名称或更改用于保存 View 的变量的名称..就像

editGyms: function() {
if ( ! this.editGymView) {
this.editGymView = this.render({
xtype: 'EditGymStore',
});
}
this.application.viewport.setActiveItem(this.editGymView);
Ext.Msg.alert('Test', "Edit's index action was called!");
}

关于javascript - Sencha Touch MVC 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6973292/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com