2014-10-09 32 views
8

dưới đây là một ví dụ bình thường của chức năng đánh dấu:Tham số `e` được chuyển tới hàm gọi lại đánh dấu lực d3.js là gì?

function tick(e) { 
    nodes 
     .each(cluster(10 * e.alpha * e.alpha)); 
} 

những người có thể cho tôi biết định nghĩa của "e"? Những đặc tính nào nó có? Tôi không thể tìm thấy bất kỳ mô tả nào về "e" và ý nghĩa của e.alpha là gì. Có, tôi đã sử dụng google nhưng không có kết quả.


Cảm ơn sự trợ giúp bạn đã cung cấp bên dưới.

Tôi đang sao chép một số mã, trong đó sử dụng

var force = d3.layout.force() 
     .nodes(nodes) 
     .size([width, height]) 
     .charge(-70) 
     .gravity(0.1) 
     .on("tick", tick) 
     .start(); 

do đó, nó chỉ là trường hợp bạn đoán. Tôi mới đến d3, một skim của API force.layout đã không cho tôi bất kỳ đầu mối. Cảm ơn thời gian quý báu của bạn!

+1

kiếm cho 'e.alpha' trong vòng [bài này] (http://flowingdata.com/2012/08/02/how-to-make-an-interactive-network- hình dung/). – FernOfTheAndes

+0

Vui lòng cung cấp thêm ngữ cảnh về nơi bạn tìm thấy chức năng này. Trình bày một chức năng trên riêng của nó không cho bạn biết bất cứ điều gì về bản chất của tham số sẽ được truyền cho nó. Tôi đã thực hiện một dự đoán hợp lý trong câu trả lời của tôi, nhưng câu hỏi là nên được đóng lại vì không chứa đủ thông tin để chẩn đoán vấn đề. – AmeliaBR

Trả lời

14

Nếu không có điều kiện đầy đủ các chức năng "bình thường" của bạn, đây là một chút của một đoán, nhưng ở đây đi:

tick được sử dụng trong nhiều ngữ cảnh trong d3. Việc inlcusion của alpha cho thấy rằng đây là một force layout tick function, được gọi bởi đối tượng bố trí lực trên một sự kiện đánh dấu, trong trường hợp này e sẽ là đối tượng sự kiện đánh dấu.

Không có nhiều tài liệu về sự kiện đánh dấu, vì hầu hết các ví dụ đều không sử dụng nó. Nếu bạn kiểm tra việc source code, bạn sẽ thấy

// A rudimentary force layout using Gauss-Seidel. 
d3.layout.force = function() {      //line 11 
    var force = {}, 
     event = d3.dispatch("start", "tick", "end"); 
    /* ... */ 
    force.tick = function() {      //line 58 
     // simulated annealing, basically 
     if ((alpha *= .99) < .005) { 
      event.end({type: "end", alpha: alpha = 0}); 
      return true; 
     } 
     /* code to implement default force layout adjustments */ 
     event.tick({type: "tick", alpha: alpha}); //line 128 
    }; 
    /* ... */ 
    return d3.rebind(force, event, "on");   //line 305 
}; 

Nói cách khác, sự kiện đánh dấu là một trong ba loại sự kiện tùy chỉnh được tạo ra bên trong mã nguồn d3 sử dụng quá trình d3.dispatch. Sự kiện tick đặc biệt được gửi đi ở cuối hàm đánh dấu nội bộ và chỉ chứa một thuộc tính tùy chỉnh: thông số alpha hiện tại trong bố cục lực. Để các sự kiện này thực sự đi bất cứ đâu, phương thức on của đối tượng điều phối sự kiện là rebound đối với đối tượng bố trí lực, để người dùng có thể đăng ký các chức năng nghe cho các sự kiện tùy chỉnh.

Nếu tất cả những gì là quá nhiều internals d3 cho bạn, chỉ cần tập trung vào những chi tiết này:

  • e là một đối tượng sự kiện tùy chỉnh thông qua với chức năng đánh dấu của bạn mỗi khi nó được gọi là
  • e.alpha được giá trị alpha hiện tại của bố cục lực, theo mặc định bắt đầu ở mức 0,1 và được giảm (theo thông số friction) tại mỗi đánh dấu cho đến khi giảm xuống dưới 0,005 và bố cục đóng băng:

    Nội bộ, bố cục sử dụng thông số làm mát alpha điều khiển nhiệt độ bố cục: khi mô phỏng vật lý hội tụ trên bố cục ổn định, nhiệt độ giảm xuống, khiến các nút di chuyển chậm hơn. Cuối cùng, alpha giảm xuống dưới ngưỡng và mô phỏng dừng hoàn toàn, giải phóng CPU và tránh xả pin. (From the API wiki for force.start)

+0

Xin lỗi, nhưng tôi phải cảm ơn bạn nhiều hơn là một upvote. Hiện tại, afaik là tài liệu công khai duy nhất về những gì được chuyển tới một hàm 'on (" tick "' được tham số hóa, và thành phần 'alpha' có nghĩa là gì (ngoài mã nguồn d3)' e.alpha' được sử dụng trong một số ví dụ (ví dụ: Google "d3 nhiều bố cục lực lượng") mà không có bất kỳ lời giải thích nào. Vì vậy, tôi ước tôi có thể đưa ra nhiều hơn một phiếu bầu cho câu trả lời này (Không phải là bạn cần có đại diện SO). không dễ dàng tìm thấy trong các tìm kiếm của Google. Nhưng không khó tìm thấy trong một tìm kiếm SO. – Mars

+1

Cảm ơn @Mars. Và bạn đã giúp tôi làm điều gì đó mà tôi nên làm vào tháng 10: Tôi [cập nhật d3 API wiki] (https://github.com/mbostock/d3/wiki/Force-Layout#on) để bao gồm thông tin này, vì vậy nó sẽ dễ tìm hơn trong tương lai! – AmeliaBR

+0

Cool (Tôi vẫn thấy câu trả lời của bạn ở đây rất hữu ích. Tôi không hiểu toàn bộ điều công văn, thật hữu ích khi thấy một lời giải thích rõ ràng tham chiếu đến định nghĩa của 'tick' tham số.) – Mars

Các vấn đề liên quan