2012-07-06 15 views
17

मैं एक ही समय में इस तरह से दोनों नोड्स और लिंक स्थापित करने की कोशिश की के लिए दोनों नोड्स और लिंक को परिभाषित "संपत्ति 'वज़न' अपरिभाषित की नहीं पढ़ सकते हैं" डेटा जिसमें कनेक्शन नहीं हो सकते हैं, इसलिए नोड्स को परिभाषित करना आवश्यक है, ताकि सभी नोड्स को प्रस्तुत किया जा सके। और शैलियों को परिभाषित करना बहुत आसान है। लेकिन मुझे यह त्रुटि मिलती है;d3.js: जब मैन्युअल रूप से बल लेआउट

Cannot read property 'weight' of undefined 

और जब मैं .links (कनेक्शन) ग्राफ renders (डॉट्स के एक झुंड में फैले हुए juts ...) मैं कनेक्शन/लिंक डी 3 के साथ सहयोग करने कैसे मिलता है बाहर टिप्पणी?

मैं दस्तावेज़ पढ़ रहा था, और जाहिर है स्रोत और लक्ष्य नोड्स सरणी में नोड्स के इंडेक्स होना चाहिए। क्या इसे बदलने के लिए वैसे भी है? तो, मैं एक सरणी में मौजूद इंडेक्स के बजाय नोड के नाम का उपयोग कर सकता हूं?

उत्तर

8

बल-निर्देशित लेआउट लेआउट की गणना करने के लिए किनारे के वजन का उपयोग करता है। अपने सभी कनेक्शन में एक डमी "weight":1 जोड़ने का प्रयास करें।

कोड है कि लिंक initializes इस तरह दिखता है:

links.forEach(function(d) { 
    if (typeof d.source == "number") { d.source = nodes[d.source]; } 
    if (typeof d.target == "number") { d.target = nodes[d.target]; } 
}); 

मुमकिन है आपको लगता है कि (d3 स्रोत में) किसी भी संपत्ति/प्रकार का उपयोग करने tweak सकता है।

4

मुझे लगता है कि आपके स्रोत और लक्ष्य में शून्य मान हो सकते हैं। मेरे पास यह बग भी था और शून्य मानों को फ़िल्टर करके इसे ठीक किया गया।

16

मुझे पहले एक ही समस्या का सामना करना पड़ता है, क्योंकि यह लिंक के स्रोत/लक्ष्य में शून्य मान है। प्रिंट आउट नोड्स और लिंक जानकारी डिबग करने के लिए

1

मैं इस मुद्दे को कई तरीकों से में पॉप अप किया है मदद कर सकता है। अभी हाल ही में मैं अपने किनारे सूची था इस प्रकार है:

{Source: 0; Target: 1} 

के बजाय:

{source: 0, target: 1} 
10

लिंक के स्रोत/लक्ष्य में अशक्त उल्लेख जवाब के अलावा, इस का कारण यह हो सकता है एक ऑफ-ऑफ-रेंज स्रोत/लक्ष्य का असाइनमेंट। जैसे आपके पास 10 नोड्स हैं और आप लक्ष्य को 11-वें अनुक्रमित नोड होने के लिए असाइन करते हैं।

+0

मैं इस समस्या है, मैं त्रुटि फेंक नहीं करता है, तो मैं अपने डेटा में नोड नहीं मिल सकता है के बारे में कैसे जाते हैं? – thatOneGuy

+0

@air_bob के रूप में कहा गया है, यदि आप कोई लिंक असाइनमेंट नोड्स की संख्या से ऊपर जाते हैं तो 0 प्रिंट करें – elachell

+0

महत्वपूर्ण चेतावनी: जावास्क्रिप्ट 0 अनुक्रमित है। तो मेरा मानना ​​है कि उचित टिप्पणी है ".. आपके पास 10 नोड्स हैं और लक्ष्य (या स्रोत) को 10 वां अनुक्रमित नोड" – JHowIX

9

उपरोक्त उत्तरों के लिए धन्यवाद जो शून्य स्रोत या लक्ष्य मानों को संदर्भित करते हैं!

मैं http://bl.ocks.org/mbostock/4062045 से ग्राफ का परीक्षण कर रहा हूं, और पाया कि मेरे डेटा में एक लापता नोड का संदर्भ है।

यह मदद मिल सकती है अन्य लोगों को इस मुद्दे को डीबग:

d3.json("my-buggy-data.json", function(error, graph) { 

    // Find blank links, which give the error 
    // "Uncaught TypeError: Cannot read property 'weight' of undefined" 
    graph.links.forEach(function(link, index, list) { 
     if (typeof graph.nodes[link.source] === 'undefined') { 
      console.log('undefined source', link); 
     } 
     if (typeof graph.nodes[link.target] === 'undefined') { 
      console.log('undefined target', link); 
     } 
    }); 

    force 
     .nodes(graph.nodes) 
     .links(graph.links) 
     .start(); 
+1

निर्दिष्ट करने के लिए यह मेरी समस्या हल करें, धन्यवाद! –