2013-01-10 17 views
0

一起使用dojo 1.7(內置於我正在使用的Esri API中)在地圖彈出窗口(用戶單擊地圖時觸發)中動態創建圖表。圖表不會在.resder中出現,但會與.render

var c = dojo.create("div", { 
      id: "demoChart" 
     }, dojo.create('div')); 

設置圖表屬性(數據,主題等)後,如果我叫chart.render,圖表呈現正常,但在錯誤的大小(太大了信息窗口div容器)。

但是,如果我打電話chart.resize(175, 145),圖表確實以正確的大小創建,但不會在第一次單擊時創建,而是第二次單擊。

請複製see this JSFiddle,並參考Javascript中的第49-53行。

map.infoWindow.setContent(c); 
    // Chart Resize will resize the DIV as needed. 
    // However, the initial click will not show the chart 
    chart.resize(175, 145); 
    // Chart Render shows the chart on first click, but does not resize the div 
    //chart.render(); 

我的印象是resize方法包括在其中調用render。因此我不太清楚爲什麼我會得到這種行爲。

我需要知道需要更改什麼才能創建與其所在的父div相同大小的圖表div。

回答

1

圖表以默認大小(400 x 300px)呈現的原因是因爲圖表節點(div#demoChart)沒有任何尺寸。

此外,直到圖表節點div可見時,圖表纔會使用任何實際維度(僅樣式維度)。然後它會回落到300 x 400像素的默認大小。

爲了讓你的代碼工作:

  1. 添加CSS樣式的DIV

    #demoChart { 
        width: 175px; 
        height: 145px; 
    } 
    
  2. 創建圖表,你已經證明了信息窗口和圖表節點是實際可見後。圖表通過實例化(在constructor()方法中,而不是像你期望的那樣在render()方法中)獲取它的維度。

我編輯了你的JSfiddle使其工作(view JSfiddle)。

+0

你可以添加一個鏈接到JSFiddle,你已經使它的工作 – Simon

+0

我以爲我已經更新了你的JSFiddle,但它沒有奏效。我已經分叉了你的JSfiddle並編輯了我的答案以包含鏈接。 – Andrew

+0

完美的作品。謝謝安德魯。關於爲什麼工具提示沒有顯示的任何快速的想法? – Simon