2015-11-20 22 views
0

我有一個帶有工具的Ext.chart.CartesianChart。我想通過itemId選擇一個工具,使用圖表對象chart_ogetComponent似乎不起作用。如何從ExtJS中的CartesianChart對象的itemId中獲取工具

現在我正在騎自行車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

我認爲這是一個錯誤的tools是一個Ext.panel.Panel配置,這實際上是一個指定header組件的子項的快捷方式 - 這又是您的孩子r圖表面板,因此應該可以在組件查詢層次結構中訪問。

已經在版本6中測試過了,它似乎已經修復 - 所以你最好的選擇是升級你的應用程序。但是,如果這是不可能的,你仍然可以通過命令/手動調用getter來引用停靠的頭部組件。

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

感謝您對實際刀具組件層次細節。 –

0

編輯:

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

function getToolByItemId(parent_id, tool_itemId) { 
    /** 
    * @author Marco Sulla ([email protected]) 
    * @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; 
}