【问题标题】:Using itemId to fetch component Extjs使用 itemId 获取组件 Extjs
【发布时间】:2014-08-15 12:10:22
【问题描述】:

我遇到了标签渲染问题。由于我在所有选项卡上使用了相同的组件,并且该组件具有带有 id 的子组件,因此选项卡的内容经常混淆。由于 id 在所有面板上显示相同,因此用于混淆的组件。我现在使用 itemId 而不是 id 并且选项卡正在正确呈现。 现在我面临另一个问题。最初我使用 Ext.getCmp(id) 来获取控制器中的组件。现在 id 被 itemId 替换了,我正在使用以下内容: Ext.getCmp(id).getComponent(itemId);

视图中有深度嵌套的组件,所有中间组件都有itemId。使用上面的语句,当我继续获取更深层次的组件时,这些语句不断扩展,如下所示:

Ext.getCmp(id).getComponent(itemId1).getComponent(itemId2).getComponent(....;

我是否正确使用了该语句?有没有更好的速记方法来达到目的?

请指教。

【问题讨论】:

    标签: extjs


    【解决方案1】:

    基本上你以正确的方式使用它,因为 itemId 仅在组件级别是唯一的(至少它必须如此)。但正如您可能看到的那样,这会有点难看,因此我强烈建议您使用Ext.ComponentQuery 或其实现之一up()down(),它们都可用于大多数组件。其中Ext.ComponentQuery 将默认查看所有实例化组件up()down() 将从执行它们的组件开始,仅遍历现有组件树。此外,up()down() 始终返回第一个匹配项,其中 Ext.ComponentQuery 始终为您提供一个数组。

    两者都接受相同的查询字符串,可以用各种方式编写(这里我建议你阅读docs

    下面是一个例子:

    Ext.getCmp(íd).getComponent(itemId1).getComponent(itemId2)
    

    预计您正在使用面板(可以是任何组件)

    Ext.ComponentQuery.query('panel[id=yourId]>panel[itemId=yourId]>panel[itemId=yourId]');
    

    假设您正在使用 MVC,因此您的所有组件都是自定义的(有自己的 xtypes)。因此,如果您知道,您只有一个带有 itemId 的“yourcustompanel”实例,您可以简单地调用:

    Ext.ComponentQuery.query('yourcustompanel[itemId=yourId]') // note you get always a array
    

    【讨论】:

      【解决方案2】:

      您可以使用 Ext.ComponentQuery.query(..) 或 down() 或 up() 来获取您所指的组件。

      如果你想在某个组件(比如容器)中获取一个组件(比如一个按钮),你可以使用

       var button = Ext.ComponentQuery.query('button[type=messageButton]', this);
      

      上面的'this'指的是容器作用域。

      或者你可以使用

      var button = this.query('button[type=messageButton]');
      

      上面的“this”也指容器范围。

      希望这对你有帮助..

      【讨论】:

      • 谢谢Sreek521!这就是我需要的。我什至不必通过其完整路径追踪组件...
      猜你喜欢
      • 1970-01-01
      • 2012-08-21
      • 2014-03-19
      • 1970-01-01
      • 1970-01-01
      • 2021-09-12
      • 2011-05-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多