Sencha触摸面板内的2个列表

时间:2012-05-07 15:18:46

标签: javascript sencha-touch-2

我需要一个非常常见的任务,我需要在列表上方显示搜索表单以显示结果,问题是列表没有显示结果,存储和代理正常工作,因为当我使用firebug定位时列表项的列表总是高度为0px。

我已经搜索过,解决此问题的常用方法是使用适合的布局,但在父面板上使用它会使所有看起来都很小,就像使用的宽度是10px一样。

我无法设置固定高度,因为我希望列表填充剩余空间,并且当我希望使用默认大小的按钮和输入字段时,flex选项不会导致拉伸搜索表单。

这是我在视图上使用的配置

Ext.define('MyApp.view.search.Search', {
extend:'Ext.navigation.View',
xtype: 'search_view',
config:{
    items:[
        {
            fullscreen:true,
            scroll:false,
            xtype:'panel',
            title:'Search',
            items:[
                {
                    xtype:'searchfield',
                    name:'search',
                    label:'Search',
                },
                {
                    xtype:'container',
                    layout:'hbox',
                    width:'100%',
                    margin:'3 0 0 0',
                    defaults:{
                        flex:1
                    },
                    items:[
                        {
                            xtype:'selectfield',
                            options:[
                                {text:'Option 1', value:'opt1'},
                                {text:'Option 2', value:'opt2'}
                            ]
                        },
                        {
                            xtype:'button',
                            text:'Search',
                            action:'search'
                        }
                    ]   
                },
                {
                    xtype:'list',
                    itemTpl:['{title}'],
                    onItemDisclosure:true,
                    plugins:[
                        { xclass: 'Ext.plugin.ListPaging' }
                    ]
                }

            ]
        },
    ],      
}
});

此图片描述了我想要实现的内容,我通过手动设置高度到列表容器来获取此屏幕截图,因为您可以看到它的工作原理问题是列表高度默认不填充表单下方的空间

goal

3 个答案:

答案 0 :(得分:1)

这就是我最终要解决这个问题的方法,因为我不得不将布局更改为只包含列表,并使用工具栏作为搜索选项,这更像是一种解决方法,这样工具栏控件只能使用他们需要正确绘制自己的最小高度。

Ext.define('MyApp.view.search.Search', {
extend:'Ext.Container',
xtype: 'search_view',
config:{
    fullscreen:true,
    layout:'card'
    items:[
        {
            xtype:'toolbar',
            docked:'top',
            items:[
                {
                    xtype:'searchfield',
                    name:'search',
                    flex:6
                },
                {
                    xtype:'button',
                    action:'search',
                    iconCls:'search',
                    iconMask:true,
                    ui:'simple',
                    flex:1
                }
                    ]
        },
        {
            xtype:'toolbar',
            docked:'top',
            items:[
                {
                    xtype:'selectfield',
                    flex:1,
                    options:[
                        {text:'Option 1', value:'opt1'},
                        {text:'Option 2', value:'opt2'}
                    ]
                }
            ]
        },
        {
             xtype:'list',
             itemTpl:['{title}'],
             onItemDisclosure:true,
             plugins:[
                 { xclass: 'Ext.plugin.ListPaging' }
             ]

        },
        ],      
    }
});

正如您所看到的,我在顶部停靠了两个工具栏,并且列表填充了整个布局。以下是它现在的样子截图。

enter image description here

感谢您的时间。

答案 1 :(得分:0)

您是否尝试将容器布局设置为“适合”?,基本上它将使用所有剩余的可用高度,这里是一个关于sencha touch布局的精彩指南:http://docs.sencha.com/touch/2-0/#!/guide/layouts直接来自文档!

答案 2 :(得分:0)

面板应具有vbox布局,列表应具有fit布局并设置flex选项。

如果示例如下所示,如果flex值未设置为按钮,则应该获得默认大小。

来自documentation

  

弯曲意味着我们根据弹性来划分可用面积   每个子组件......

以下是一个例子:

Ext.define('MyApp.view.Main',{     extend:'Ext.tab.Panel',

config: {
  tabBarPosition: 'bottom',

  items: [
    {
      title: 'Welcome',
      iconCls: 'home',

      html: [
        "Some content"
      ].join("")
    },

    {
      title: "About",
      iconCls: 'star',
      layout: "vbox", // this card has vbox layout

      items: [{
        docked: 'top',
        xtype: 'titlebar',
        title: 'List'
      },

      {
        xtype: "list",
        layout: "fit", // take as much space as available
        flex: 1, // define flex
        data: [
          {name: 'Jamie Avins',  age: 100},
          {name: 'Rob Dougan',   age: 21},
          {name: 'Tommy Maintz', age: 24},
          {name: 'Jacky Nguyen', age: 24},
          {name: 'Ed Spencer',   age: 26}
        ],
        itemTpl: '{name} is {age} years old'
      },

      {
        xtype: 'button',
        text: "Button"
      }

      ]
    }
  ]
}

});

截图:

screenshot

注意:我正在学习Sencha Touch,所以我不确定写的是否正确。