2015-09-28 51 views
1

我使用NVD3 1.8.1與3.5.6 D3。NVD3 arcTween FUNC拋出未定義的錯誤

我有一個奇怪的問題,即由於某種原因(約5-10%的時間)我圖形不加載。

錯誤是「未捕獲類型錯誤:對象是不是一個函數」在nv.d3.js由arcTween功能(餅圖)拋出:

function arcTween(a, idx) { 
      a.endAngle = isNaN(a.endAngle) ? 0 : a.endAngle; 
      a.startAngle = isNaN(a.startAngle) ? 0 : a.startAngle; 
      if (!donut) a.innerRadius = 0; 
      var i = d3.interpolate(this._current, a); 
      this._current = i(0); 
      return function (t) { 
       return arcs[idx](i(t)); 
      }; 
     } 

調試時,我可以看到的值都在這個地方,即idx似乎是整個nvd3庫的參考,而不是一個整數! 「我」是一個數字不是一個函數,this._current是不確定等

如果我刷新它打破上的時間平均大概5〜10%的頁面。除此之外,它一切正常,如預期。

我創建了一個codepen here,但不能複製的問題,不幸的是......我應該提到這是所有包含在一個角度指令,併產生的角度傳遞創建指令時的'元素'。

鑑於我只能在代碼中間歇性地重新創建它,我知道它一定是我的代碼出了問題,但我無法弄清楚,所以作爲最後的手段認爲我會在這裏發佈問題。

有沒有人見過這個問題之前?有什麼建議來解決這個問題?我正在考慮像檢查圖形是否已經正確生成,否則嘗試再次渲染它,但它不討厭找到根本原因。

我會爲任何建議表示感謝,

山姆

編輯:

而且,圖表部分產生,只是 '路徑' 缺少對每個 '切片':

<svg class="_pie1 nvd3-svg"><g class="nvd3 nv-wrap nv-pieChart" transform="translate(20,30)"><g><g class="nv-pieWrap nvd3-svg"><g class="nvd3 nv-wrap nv-pie nv-chart-2110" transform="translate(0,0)"><g><g class="nv-pie" transform="translate(177.5,172.5)"><g class="nv-slice" fill="#00385D" stroke="#00385D"><path></path></g><g class="nv-slice" fill="transparent" stroke="transparent"><path></path></g></g><g class="nv-pieLabels" transform="translate(177.5,172.5)"></g></g></g></g><g class="nv-legendWrap"></g></g></g><text x="195" y="180" dy="-.7em" class="nv-title" style="text-anchor: middle;">Total income*</text><text x="195" y="210" dy="-.7em" class="nv-titleValue" style="text-anchor: middle;">£4,543</text><line x1="130" y1="205" x2="265" y2="205" stroke-width="0.1" stroke="#333333"></line><text x="195" y="245" dy="-.7em" class="nv-title" style="text-anchor: middle;">Total outgoings</text><text x="195" y="275" dy="-.7em" class="nv-titleValue" style="text-anchor: middle;">£46,574</text></svg> 

再次編輯:如果我刪除50ms超時(請參閱codepen),我每次都會收到錯誤,所以這裏有一些時間問題。

回答

-1
return arcs[idx](i(t)); 

這看起來像一個意想不到的函數調用,可能會導致您的錯誤?

如果你正在尋找做一些乘法那裏,那麼我建議明確使用星號(*)。

例如

return arcs[idx] * (i(t)); 
+0

嗨@DubstepCat,這是正確的,該行引發錯誤。這是一個來自nvd3庫的函數。我按照你的建議改變了它,但是這導致圖形從不產生並且每次都拋出錯誤(錯誤:屬性d =「NaN」的值無效)。感謝您的及時幫助 – sam9046

1

好的我想通了。基本上我們用的1值創建扇形圖,那麼這個不斷變化的實際值,這樣我們就可以得到一個不錯的nvd3過渡(如nvd3不動畫如果與實際值的圖形負載,當你改變它們是唯一)。

我們有一個50毫秒的超時,意圖等待頁面明顯加載(我們有一個淡入淡出的動畫),所以在加載頁面時用戶可以看到餅圖動畫,但這實際上掩蓋了設置問題該圖表快速連續兩次(至1,然後爲實際值),這是造成問題的原因。顯然,該圖需要超過50ms才能偶爾渲染,所以我們得到了間歇性錯誤。

+1

很高興你把它分類:) – Whiplash450

相關問題