我用Sencha触摸我的第一步.结果就是我之后,到达那里是一个斗争,以获得如何组合在一起.我慢慢地想出来,但有时代码的工作方式有点WTF.
我正在尝试构建一个非常简单的应用程序,执行以下操作.
1)有三个选项卡,附近搜索(geo),快速关键词搜索,类别搜索.
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',items: [new Ext.Component({
- html: '<img src="images/gfb.gif" />'
- }),quickForm]
- });
我现在有一个表单看起来我想要什么,并挂在我的json搜索和返回广告到控制台.大!
现在我想创建一个列表视图,它有一个带有后退按钮的顶部栏.这个我相当肯定不是设置这个的方法,但是我真的很努力地找到关于如何做这个的例子,因为源的例子有一个复杂的设置,简单的不做我以后.
我现在在我的index.js文件的顶部添加一个模型配置来定义我的广告模型
- Ext.regModel('Advert',{
- fields: [
- {name: 'advertid',type:'int'},{name: 'Clientname',type:'string'},{name: 'telephone',{name: 'mobile',{name: 'fax',{name: 'url',{name: 'email',{name: 'additionalinfo',{name: 'address1',{name: 'address2',{name: 'address3',{name: 'postcode',{name: 'city',{name: 'Countyname',{name: 'longitude',{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
- }));
- },Ext.toArray(arguments));
- }
- }
这样做是不会像我想要的那样滑动,就像点击底部标签栏中的图标一样.
现在这是我跌倒的地方,我无法弄清楚我如何使后退按钮工作,让我回到关键字搜索.
我已经找到了setCard和setActiveItem,但我似乎无法访问结果侦听器函数中的“this”上下文中的那些.
有人可以给出一个如何做到这一点的简单例子吗?
解决方法
解决这个问题的最简单方法可能是通过给你的TabPanel一个id,然后在你的处理程序中引用它.尝试更新您的tabpanel,如下所示:
- var tabpanel = new Ext.TabPanel({
- id: 'mainPanel',... the rest of your config here
和你的后退按钮处理程序,如下所示:
- handler: function() {
- Ext.getCmp('mainPanel').layout.setActiveItem(0);
- }
这将移动到标题板(您的位置卡)中的第一张卡.
或者,如果要在handler函数中修改“this”的值,只需传递一个范围:
- text: 'Back',scope: tabpanel,handler: function(){
- this.layout.setActiveItem(0);
- }
‘this’现在指的是您在范围配置中传递的任何内容.看到人们使用“范围:这个”是很常见的,所以他们的处理程序中的’这个’与处理程序之外的’这个’相同.