这里有人能解释一下Ext.ComponentQuery.query('这里有什么?')[0]?

时间:2012-04-20 10:48:21

标签: android checkbox sencha-touch-2

朋友你好我被困在了sencha touch 2.0中的一个点。我正在我的应用程序中创建一个屏幕,我需要获取复选框值(选中或取消选中)。我在sencha文档中引用this示例,但我无法理解如何使用Ext.ComponentQuery.query('这里有什么?')[0]。

修改

这是我的代码: -

Ext.define('MyApp.view.groupList',{
    extend : 'Ext.navigation.View',
    requires: ['Ext.field.Search', 'Ext.TitleBar'],
    alias: "widget.groupList",
    itemId: "gList",
    initialize: function(){
        this.callParent(arguments),
        var checkBox = {
            xtype: 'checkboxfield',
              name : 'all',
            //  label: 'All',
              value: 'all',
              lableWidth: "0",
              width: 1,
              padding: '0 0 15 30',
              checked: false
        };

        var sendBtn = {
                itemId: 'sendBtn',
                xtype: 'button',
                text: 'Send',
                ui: 'action',
                handler: function() {
                    var check = Ext.ComponentQuery.query('navigationview')[0],
                        values = check.getValues();

                    Ext.Msg.alert(null,
                        "Selected All: " + ((values.all) ? "yes" : "no")

                    );
                }     
        };

        var topToolbar = {
            xtype : "toolbar",
            title : "Groups",
            docked : "top",
            items: [
                    checkBox,
                    {xtype: 'spacer'},      
                  //  searchBtn, 
                    sendBtn
            ],
        };
        var list = {
                xtype: "grlist",
                store: Ext.getStore("grStore")
        };

        this.add([list,topToolbar]);
    },

    config: {
        navigationBar: {
            hidden: true,
        },
    }
});

我收到以下错误: -

TypeError: Result of expression 'check.getValues' [undefined] is not a function. at
 file:///android_asset/www/app/view/group_list.js

因此,请让我了解Ext.ComponentQuery如何使用一些示例代码或教程。

提前完成。

2 个答案:

答案 0 :(得分:6)

Ext.ComponentQuery接受3种类型的参数:

  • xtype,例如:Ext.ComponentQuery.query('navigationview')
  • id,例如:Ext.ComponentQuery.query('my-nav-view-id')
  • attributes,例如:Ext.ComponentQuery.query('navigationview[name="my nav view"]')

无论param属于哪种类型,Ext.ComponentQuery.query()始终返回匹配组件的数组。在示例中,他们添加[0],因为它确保结果数组只包含1个项目。

在您的代码中,您似乎尝试查询xtype navigationview的组件,此类组件没有getValues方法(仅适用于Ext.form.Panel并派生类)。因此,如果要检索值,则必须使用如下查询:

Ext.ComponentQuery.query('checkboxfield')[0]

希望它有所帮助。

答案 1 :(得分:0)

Ext.ComponentQuery文档是here ...

不应该在此示例中使用它。 由于不使用全局搜索方法,此代码将更加安静和可笑。

var sendBtn = {
            itemId: 'sendBtn',
            xtype: 'button',
            text: 'Send',
            ui: 'action',
            scope: this,
            handler: function() {
                var check = this.down('#checkboxfield'),
                values = check.getValue();
                Ext.Msg.alert(null,
                    "Selected All: " + ((values.all) ? "yes" : "no")
                );
            }     
    };

此外,我已经更正了代码示例,方法是getValue()

注意: 我知道这个答案是如此过时而且它并不相关,但是接受的方法是鼓励使用Ext.ComponentQuery而不需要它,这只是糟糕的代码并且逻辑代码假定为ui将保持相同的设置格式。