gpt4 book ai didi

javascript - 在 sencha touch 中使用按钮导航

转载 作者:可可西里 更新时间:2023-11-01 02:39:04 25 4
gpt4 key购买 nike

我正在迈出使用 Sencha touch 的第一步。结果正是我所追求的,然而要获得 Sencha 的组合方式却很困难。我正在慢慢弄清楚,但有时代码的工作方式有点 WTF。

我正在尝试构建一个非常简单的应用程序来执行以下操作。

1) 具有三个选项卡,附近搜索(地理)、快速关键字搜索、类别搜索。
2) 每个选项卡搜索返回​​一个结果列表
3) 单击每一行可以显示更多信息。

我认为我已经找到了标签。

像这样:

Ext.setup({
tabletStartupScreen: 'tablet_startup.png',
phoneStartupScreen: 'phone_startup.png',
icon: 'icon.png',
glossOnIcon: false,
onReady: function() {

var location = new Ext.Container({
iconCls: 'search',
title: 'Location Search',
items: [new Ext.Component({
html: '<img src="images/gfb.gif" />'
})]
});

var quick = new Ext.Container({
iconCls: 'search',
title: 'Quick Search',
scroll: 'vertical',
items: [new Ext.Component({
html: '<img src="images/gfb.gif" />'
})]
});

var category = new Ext.Component({
iconCls: 'search',
title: 'Category Search',
html: '<img src="images/gfb.gif" /><p>Category</p>'
});
var tabpanel = new Ext.TabPanel({
fullscreen: true,
tabBar: {
dock: 'bottom',
scroll: 'horizontal',
sortable: false,
layout: {
pack: 'center'
}
},
cls: 'card1',
items: [
location,
quick,
category
]
});
}
});

效果很好。我知道的选项卡之间没有区别,但我正在努力做到这一点......

好的,我首先要处理的是“关键字搜索”选项卡,因为这是测试该应用程序最简单的选项卡。

所以我添加了一个表单。

var quickFormBase = {
url: "../quicksearch.php?output=json",
items: [{
xtype: 'fieldset',
instructions: 'The keyword search is great if you know the name of the company you are looking for, or the particular service you need to find.<p><br />To narrow it down to an area include the town or county name in your query</p>',
defaults: {
required: false,
labelAlign: 'left'
},
items: [{
xtype: 'textfield',
label: 'Search',
name : 'inpquery',
showClear: true,
autoCapitalize : false
}]
}],
listeners : {
submit : function(form, result){
console.log('results', result.SearchResults.MainResults.Advert);
},
exception : function(form, result){
console.log('failure', Ext.toArray(arguments));
}
}
};

var quickForm = new Ext.form.FormPanel(quickFormBase);

所以我的快速选项卡配置现在看起来像这样:

var quick = new Ext.Container({
iconCls: 'search',
title: 'Quick Search',
scroll: 'vertical',
items: [new Ext.Component({
html: '<img src="images/gfb.gif" />'
}),quickForm]
});

我现在有一个完全符合我的要求的表单,并连接到我的 json 搜索并将广告返回到控制台。太棒了!

现在我想创建一个 ListView ,它有一个顶栏和一个后退按钮。我很确定这不是设置它的方法,但我真的很难找到关于如何做到这一点的例子,因为源代码的例子有一个复杂的设置,而简单的不做我想要的.

我现在在我的 index.js 文件的顶部添加一个模型配置来定义我的广告模型

Ext.regModel('Advert',{
fields: [
{name: 'advertid', type:'int'},
{name: 'Clientname', type:'string'},
{name: 'telephone', type:'string'},
{name: 'mobile', type:'string'},
{name: 'fax', type:'string'},
{name: 'url', type:'string'},
{name: 'email', type:'string'},
{name: 'additionalinfo', type:'string'},
{name: 'address1', type:'string'},
{name: 'address2', type:'string'},
{name: 'address3', type:'string'},
{name: 'postcode', type:'string'},
{name: 'city', type:'string'},
{name: 'Countyname', type:'string'},
{name: 'longitude', type:'string'},
{name: 'latitude', type:'string'}
]
});

在我的表单成功监听器中,我执行以下操作:

listeners : {
submit : function(form, result){

var quickstore = new Ext.data.JsonStore({
model : 'Advert',
data : result.SearchResults.MainResults.Advert
});

var listConfig = {
tpl: '<tpl for="."><div class="advert">{Clientname}</div></tpl>',
scope: this,
itemSelector: 'div.advert',
singleSelect: true,
store: quickstore,
dockedItems: [
{
xtype: 'toolbar',
dock: 'top',
items: [
{
text: 'Back',
ui: 'back',
handler: function(){
//Do some magic and make it go back, ta!
}
}
]
}
]
};
var list = new Ext.List(Ext.apply(listConfig, {
fullscreen: true
}));
},
exception : function(form, result){
console.log('failure', Ext.toArray(arguments));
}
}

这有效,但它不会像我希望的那样滑入,就像单击底部标签栏中的图标时那样。

现在这就是我失败的地方,我无法弄清楚如何使后退按钮起作用以将我带回关键字搜索。

我找到了 setCard 和 setActiveItem,但我似乎无法在结果监听器函数的“this”上下文中访问它们。

谁能举一个简单的例子说明如何做到这一点?

最佳答案

解决此问题的最简单方法可能是为 TabPanel 提供一个 ID,然后在处理程序中引用它。尝试像这样更新您的标签面板:

var tabpanel = new Ext.TabPanel({
id: 'mainPanel',
... the rest of your config here

你的后退按钮处理程序是这样的:

handler: function() {
Ext.getCmp('mainPanel').layout.setActiveItem(0);
}

这将移动到选项卡面板中的第一张卡片(您的位置卡片)。

或者,如果你想在处理函数中修改'this'的值,你可以只传入一个范围:

text: 'Back',
ui: 'back',
scope: tabpanel,
handler: function(){
this.layout.setActiveItem(0);
}

“this”现在指的是您在作用域配置中传入的任何内容。人们经常看到人们使用“scope: this”,这样他们的处理程序内部的“this”与处理程序外部的“this”相同。

关于javascript - 在 sencha touch 中使用按钮导航,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3985265/

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