javascript – 用sencha触摸按钮导航

前端之家收集整理的这篇文章主要介绍了javascript – 用sencha触摸按钮导航前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我用Sencha触摸我的第一步.结果就是我之后,到达那里是一个斗争,以获得如何组合在一起.我慢慢地想出来,但有时代码的工作方式有点WTF.

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

1)有三个选项卡,附近搜索(geo),快速关键词搜索,类别搜索.
2)每个选项卡搜索返回​​结果列表
3)每个行都可点击显示更多信息.

我已经弄清楚了我的想法.

像这样:

  1. Ext.setup({
  2. tabletStartupScreen: 'tablet_startup.png',phoneStartupScreen: 'phone_startup.png',icon: 'icon.png',glossOnIcon: false,onReady: function() {
  3.  
  4. var location = new Ext.Container({
  5. iconCls: 'search',title: 'Location Search',items: [new Ext.Component({
  6. html: '<img src="images/gfb.gif" />'
  7. })]
  8. });
  9.  
  10. var quick = new Ext.Container({
  11. iconCls: 'search',title: 'Quick Search',scroll: 'vertical',items: [new Ext.Component({
  12. html: '<img src="images/gfb.gif" />'
  13. })]
  14. });
  15.  
  16. var category = new Ext.Component({
  17. iconCls: 'search',title: 'Category Search',html: '<img src="images/gfb.gif" /><p>Category</p>'
  18. });
  19. var tabpanel = new Ext.TabPanel({
  20. fullscreen: true,tabBar: {
  21. dock: 'bottom',scroll: 'horizontal',sortable: false,layout: {
  22. pack: 'center'
  23. }
  24. },cls: 'card1',items: [
  25. location,quick,category
  26. ]
  27. });
  28. }
  29. });

这很好.我知道的标签之间没有区别,但我正在建立

对,我想要处理的第一件事是关键字搜索标签,因为这是测试这个应用程序的最简单的一个.

所以我添加一个表单.

  1. var quickFormBase = {
  2. url: "../quicksearch.PHP?output=json",items: [{
  3. 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: {
  4. required: false,labelAlign: 'left'
  5. },items: [{
  6. xtype: 'textfield',label: 'Search',name : 'inpquery',showClear: true,autoCapitalize : false
  7. }]
  8. }],listeners : {
  9. submit : function(form,result){
  10. console.log('results',result.SearchResults.MainResults.Advert);
  11. },exception : function(form,result){
  12. console.log('failure',Ext.toArray(arguments));
  13. }
  14. }
  15. };
  16.  
  17. var quickForm = new Ext.form.FormPanel(quickFormBase);

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

  1. var quick = new Ext.Container({
  2. iconCls: 'search',items: [new Ext.Component({
  3. html: '<img src="images/gfb.gif" />'
  4. }),quickForm]
  5. });

我现在有一个表单看起来我想要什么,并挂在我的json搜索和返回广告到控制台.大!

现在我想创建一个列表视图,它有一个带有后退按钮的顶部栏.这个我相当肯定不是设置这个的方法,但是我真的很努力地找到关于如何做这个的例子,因为源的例子有一个复杂的设置,简单的不做我以后.

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

  1. Ext.regModel('Advert',{
  2. fields: [
  3. {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'}
  4. ]
  5. });

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

  1. listeners : {
  2. submit : function(form,result){
  3.  
  4. var quickstore = new Ext.data.JsonStore({
  5. model : 'Advert',data : result.SearchResults.MainResults.Advert
  6. });
  7.  
  8. var listConfig = {
  9. tpl: '<tpl for="."><div class="advert">{Clientname}</div></tpl>',scope: this,itemSelector: 'div.advert',singleSelect: true,store: quickstore,dockedItems: [
  10. {
  11. xtype: 'toolbar',dock: 'top',items: [
  12. {
  13. text: 'Back',ui: 'back',handler: function(){
  14. //Do some magic and make it go back,ta!
  15. }
  16. }
  17. ]
  18. }
  19. ]
  20. };
  21. var list = new Ext.List(Ext.apply(listConfig,{
  22. fullscreen: true
  23. }));
  24. },Ext.toArray(arguments));
  25. }
  26. }

这样做是不会像我想要的那样滑动,就像点击底部标签栏中的图标一样.

现在这是我跌倒的地方,我无法弄清楚我如何使后退按钮工作,让我回到关键字搜索.

我已经找到了setCard和setActiveItem,但我似乎无法访问结果侦听器函数中的“this”上下文中的那些.

有人可以给出一个如何做到这一点的简单例子吗?

解决方法

解决这个问题的最简单方法可能是通过给你的TabPanel一个id,然后在你的处理程序中引用它.尝试更新您的tabpanel,如下所示:
  1. var tabpanel = new Ext.TabPanel({
  2. id: 'mainPanel',... the rest of your config here

和你的后退按钮处理程序,如下所示:

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

这将移动到标题板(您的位置卡)中的第一张卡.

或者,如果要在handler函数修改“this”的值,只需传递一个范围:

  1. text: 'Back',scope: tabpanel,handler: function(){
  2. this.layout.setActiveItem(0);
  3. }

‘this’现在指的是您在范围配置中传递的任何内容.看到人们使用“范围:这个”是很常见的,所以他们的处理程序中的’这个’与处理程序之外的’这个’相同.

猜你在找的JavaScript相关文章