سؤال

يرجى إلقاء نظرة على هذا jsfiddle البسيط: http://jsfiddle.net/perikut/9qUVW/2/ (آسف إذا كنت تستخدم Firefox، لا أعرف لماذا لا يبدو جيدًا...)

enter image description here

في كائننا، هل يمكننا استخدام كلمة أخرى غير "الأطفال" للإشارة إلى المكان الذي يتم استخراج البيانات منه؟(جميع الأمثلة التي أراها تتبع بنية البيانات هذه، انظر أدناه).أين يجب أن نشير إلى ذلك؟

أنا أعتبر الكود الخاص بي ناقصًا تمامًا (راجع jsfiddle) ، حيث أنني مجبر على الإعلان عن معلمة "المجموعة" مرتين لإظهار/إخفاء الأطفال من مجموعة/أحد الوالدين.

لن تكون هناك طريقة لتحديد العقد الفرعية للمجموعة 1 مباشرةً وتطبيق الرسوم المتحركة عليها؟أريد بنية بيانات أكثر تعقيدًا في المستقبل، لذا أحتاج إلى معرفة هذا النوع من الأساسيات من قبل.

هيكل البيانات الحالي:

data = {
name:'root',
group:'no_group',
children:[
    {
        group: 'group1',
        children:[
            { group:'group1',name:'a1',value:10,color:'red' },
            { group:'group1',name:'a2',value:40,color:'lightcoral' }
        ]
    }
    , { .... } 
هل كانت مفيدة؟

المحلول

في D3 التخطيطات الهرمية, ، تتم تعبئة جميع العقد بمجموعة من السمات القياسية, ، بما في ذلك السمة "الأصل".لذلك يمكنك تجنب تحديد سمة "مجموعة"، واستخدام "أصل" بدلاً من ذلك عند تحديد العناصر الفرعية لعقدة معينة:

d3.selectAll("circle").filter(function(d) { return d.parent.name === "foo"; });

وبدلاً من ذلك، يمكنك المقارنة حسب مرجع الكائن إذا كان لديك مرجع إلى كائن العقدة نفسه.

var parent = nodes.filter(function(d) { return d.name === "foo"; });
d3.selectAll("circle").filter(function(d) { return d.parent === parent; });

أفترض هنا أن كل عقدة لها سمة "اسم".

لقد ذكرت أيضًا استخدام استرداد الأطفال من سمة مختلفة.نعم يمكن تحقيق ذلك باستخدام ملحق "الأطفال"..لاحظ أن هذا سيؤدي إلى تخزين العناصر الفرعية للعقدة في سمة تسمى "الأبناء" على تلك العقدة، مما يؤدي إلى الكتابة فوق أي شيء قد يكون موجودًا هناك بالفعل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top