簡體   English   中英

Javascript:從另一個文件調用 D3 中的函數

[英]Javascript: calling function within D3 from another file

我想在 d3.js 腳本中重寫幾個與布局之一相關的函數。 當我將這些函數剪切並粘貼到單獨的文件中並在 d3.js 之后加載它們時,可視化不再起作用,因為內部函數調用 d3.js 的內部函數。

d3.js:

!function() {
  var d3 = { version: "3.5.17" };
  function d3_funct() { return d3; } // this function is called in the other file
}();

和弦.js:

d3.svg.chord() = function() {
  var funct = d3_funct; // doesn't work
};

題:

d3_funct在另一個文件中的立即執行的函數表達式中定義時,我將如何在我的腳本 chord.js 中使用上述函數d3_funct

選項:

  1. 直接編輯 d3.js 文件而不是拉出函數來重寫:(
  2. 重命名封閉的 d3 函數並使用 jQuery 將其加載到 chord.js 中。

我錯過了什么嗎?

所以,你的執行順序應該是:

  1. 加載 d3.js
  2. 加載您的自定義修改
  3. 加載其余的代碼

您的修改文件應如下所示:

function myBetterD3Funct () { ... }
d3.d3_funct = myBetterD3Funct;

以上將是迄今為止最好的選擇。 您在做什么非常清楚,並且不需要您每次下載最新版本時都修改 d3.js 文件(從而允許您使用 d3 cdn 為您的用戶提供 d3.js 服務)。

如果您不想覆蓋 d3 全局函數本身,則存在另一個選項。 我警告您,以下內容可能不適用於所有情況,具體取決於您的myBetterD3Funct復雜myBetterD3Funct以及它需要在d3訪問的內容。

function myBetterD3Funct () { ... }
myBetterD3Funct.apply(d3);

這樣做是將函數的范圍(在運行時)設置為全局 d3 對象。 這將允許它使用this引用全局d3對象中的頂級屬性。 正如下面的評論中所指出的,代碼中的許多函數和變量都被編寫為 private ,因此您無法以任何方式訪問它們(除了修改源代碼)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM