如何从ExtJS中的CartesianChart对象获取itemId的工具

时间:2015-11-20 15:16:42

标签: extjs extjs5

我有Ext.chart.CartesianChart个工具。我想使用图表对象chart_o按itemId选择工具。 getComponent似乎不起作用。

现在我骑在chart_o.tools上并检查itemId是否匹配。有内置方法吗?我正在使用ExtJS 5.1.0

代码:

{
    xtype: "Ext.chart.CartesianChart",
    id: "tensioni_modulo",
    title: '<div style="line-height:28px">Tensioni (modulo)</div>',
    tools: [
        {
            type: "maximize",
            itemId: "max",
        },
        {
            type: "minimize",
            itemId: "min",
        },
    ],
}

2 个答案:

答案 0 :(得分:2)

我认为这是一个错误,因为tools是一个Ext.panel.Panel配置,它实际上是指定header组件的子项的快捷方式 - 这些子项又是一个子项您的图表面板,因此应该可以在组件查询层次结构中访问。

在版本6中进行了测试后,似乎已经修复了 - 所以最好的办法是升级你的应用程序。但是,如果不可能,您仍然可以通过命令/手动调用getter来引用停靠的标头组件。的

myChart.getHeader().down('#max'); // works in 5.1

答案 1 :(得分:0)

编辑:

我使用Emissary's solution更新了我的功能:

function getToolByItemId(parent_id, tool_itemId) {
    /**
     *  @author Marco Sulla (marcosullaroma@gmail.com)
     *  @author Emissary (https://stackoverflow.com/a/33853996/1763602)
     *  @date Nov 20, 2015
     */

    var p = Ext.getCmp(parent_id);

    if (! p) {
        throw new Error("No component with id '" + 
                        parent_id.toString() + "'");
    }

    var h = p.getHeader();

    if (! h) {
        throw new Error("Component '" + parent_id.toString() + 
                        "' has no header");
    }

    var tool = h.down("#" + tool_itemId);

    if (! tool) {
        throw new Error("No tool with itemId '" + 
                        tool_itemId.toString() + 
                        "' in component '" + 
                        parent_id.toString() + "'");
    }

    return tool;
}