【问题标题】:Grabbing a Extjs component抓取一个 Extjs 组件
【发布时间】:2014-01-04 05:07:16
【问题描述】:

请帮助理解为什么下面注释的代码在 ExtJs 3.4 上不起作用:

var mywin=new Ext.Window({
        width : 200,
        height: 150,
        title : 'Accordion',
        layout: 'accordion',
        border: false,
        items: [
            panel1,
            panel2
        ]
    }).show();

    <!--Ext.getCmp('mywin').add({ - THIS DOES NOT WORK ,while below works-->

    mywin.add({
        title: 'Appended panel',
        id: 'addedPanel',
        html : 'Add Me!'
    });
    mywin.doLayout();

【问题讨论】:

    标签: extjs extjs3


    【解决方案1】:

    mywin 是对您创建的窗口对象的引用。这只是一个使用变量赋值的普通 JS 构造。

    Ext.getCmp('mywin') 尝试查找具有id 属性为mywin 的组件。避免使用Ext.getCmp 通常是个好主意,除非您只创建一次组件实例,因为它必须是全局唯一的。

    【讨论】:

      【解决方案2】:

      Ext.getCmp('x') 仅在 x 是某个组件的 id 时才有效(面板或窗口,无论您想使用什么)。只需提供一个 id 字段(id:'component_Id') 并在组件的 id 上使用 Ext.getCmp。 在很多情况下你也可以使用lookupReference,请查看extjs docs。

      【讨论】:

        【解决方案3】:

        您可以尝试使用以下方法获取对窗口的引用(尽管您的 mywin 变量中已经包含它):

        var winInstance = Ext.ComponentQuery.query('mywin')[0];
           winInstance.add({
                title: 'Appended panel',
                id: 'addedPanel',
                html : 'Add Me!'
            });
        

        但问题是您试图使用变量的名称来引用您的窗口组件,所以就像之前的答案中提到的那样,您需要使用 itemId: 'mywin'id: 'mywin',因为目前有确实没有具有该名称的 itemId 或 id 的组件。

        【讨论】:

        • 既然已经引用了组件,为什么还要查询它?
        • 我知道他已经引用了它,我在我的帖子中提到了它,我回答了他关于获取对他的窗口的引用的部分问题,也许我的回答不够清楚。我的错。特别是 Ext.getCmp 部分。
        猜你喜欢
        • 2010-10-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-12
        • 2011-05-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多