2012-06-28 32 views
6

का उपयोग करते समय डेटा ऑर्डर करने के लिए एक पेड़ के उत्पादन के लिए स्लीग्रिड विकी पर उदाहरण डेटा उत्पन्न करता है जिसे सही क्रम में आदेश दिया जाता है जिसे पेड़ को माता-पिता और बच्चों को आउटपुट करने की आवश्यकता होती है। देखें: http://mleibman.github.com/SlickGrid/examples/example5-collapsing.html - आप उदाहरण के लिए देख सकते हैं कि यदि माता-पिता कार्य 1 है, तो बच्चे कार्य 2 और कार्य 3 आदि हैं।स्लिक्ग्रिड पेड़

हम कैसे स्ल ग्रिड को बताते हैं कि नोड्स डॉन करते समय नोड्स को ऑर्डर करने के लिए कैसे करें ऐसी संपत्ति नहीं है जिसे नोड्स को सॉर्ट करने के लिए आसानी से उपयोग किया जा सके ताकि बच्चे तुरंत अपने माता-पिता का पालन कर सकें?

इसके अलावा, एक स्लिम-पेड़ समर्थन सॉर्टिंग कर सकते हैं, यानी यह नोड ऑर्डर के साथ कैसे खेलता है?

उत्तर

1
  1. आपको इसे ग्रिड में जोड़ने से पहले अपने डेटा को ऑर्डर करना होगा। ऐसे कार्यों में कोई भी निर्मित नहीं है जो आपके लिए डेटा को समझ और सॉर्ट कर सकें (जहां तक ​​मुझे पता है)। यदि आप Binary Search Tree का उपयोग करते हैं, तो मुझे लगता है कि आप बस बाएं पत्ते द्वारा क्रमबद्ध कर सकते हैं। अन्य वृक्ष संरचनाओं के साथ, आपके पास शायद डेटा के माध्यम से बहुत लूप हो या इसे क्रमबद्ध करने के लिए एक रिकर्सिव एसक्यूएल-क्वेरी लिखें।
  2. चूंकि डेटा को आदेश देने की आवश्यकता है, इसलिए पेड़ को सॉर्ट करने का समर्थन करने का कोई आसान तरीका नहीं है। मूल सॉर्टिंग आपके संरचित डेटा को नष्ट कर देगी। हालांकि, अगर आपके पास सॉर्टऑर्डर पर कोई संपत्ति है, तो आप डेटा को सॉर्ट करने में सक्षम होना चाहिए। यदि आपके पास सॉर्टऑर्डर = 1 के रूप में सभी स्तर 1 नोड्स हैं, सॉर्टऑर्डर = 2 के रूप में स्तर 2 नोड्स और इसी तरह, इसे क्रमबद्ध क्रमबद्ध करें और फिर कॉलम आरोही या अवरोही क्रम में क्रमबद्ध करें। Multi column sort देखें कि आप यह कैसे कर सकते हैं इसकी अच्छी समझ प्राप्त करें।

    grid.onSort.subscribe(function (e, args) { 
        var cols = args.sortCols; 
    
        data.sort(function (dataRow1, dataRow2) { 
         //first sort by your parameter, then combine it with example sort: 
         var sortOrderResult = (dataRow1["sortOrder"] == dataRow2["sortOrder"] ? 0 
         : (dataRow1["sortOrder"] > dataRow2["sortOrder"] ? 1 : -1)); 
    
         if(sortOrderResult != 0) 
          return sortOrderResult; 
         else { 
          var field = cols[i].sortCol.field; 
          var sign = cols[i].sortAsc ? 1 : -1; 
          var value1 = dataRow1[field], value2 = dataRow2[field]; 
          var result = (value1 == value2 ? 0 : (value1 > value2 ? 1 : -1)) * sign; 
          if (result != 0) { 
           return result; 
          } 
         } 
        } 
    }); 
    

कुछ बातें अगर तुम पेड़ छँटाई स्तंभ की कोशिश करने जा रहे हैं पर विचार करने के:

आप उदाहरण को देखें, तो 5 आप देख सकते हैं कि दोनों फिल्टर और फॉर्मेटर लागू किए गए हैं ताकि डेटा को सॉर्ट करने की आवश्यकता हो।

फिल्टर:

//part of the formatter for showing collapse/open nodes 
if (dataViewData[idx + 1] && dataViewData[idx + 1].indent > dataViewData[idx].indent) { 
    if (dataContext._collapsed) { 
     return spacer + " <span class='toggle expand'></span>&nbsp;" + value; 
    } else { 
    //....... 
    } 
} 

मैं इन वास्तविक आईडी का उपयोग करने के बजाय में डेटा के आदेश के खिलाफ जाँच दुबारा लिखा:

//part of the filter. 
var parent = dataViewData[item.parent]; 

while (parent) { 
    if (parent._collapsed) { 
     parent._collapsed = false; 
    } 
    parent = dataViewData[parent.parent]; 
} 

और यहाँ फ़ॉर्मेटर का एक हिस्सा है डेटा देखें। यह देखने के लिए कि आपके वर्तमान नोड में कोई बच्चा है या नहीं, यह आपको अपने सभी डेटा के माध्यम से बहुत लूप की आवश्यकता है। तुम भी dataViewData प्रतिस्थापित करने की आवश्यकता [IDX] कॉल:

//instead of dataViewData[item.parent]; 
var parent = dataView.getItemById(item.parent); 

यह भले ही नोड्स पृथक नहीं किया जा वृक्ष काम कर देगा, लेकिन जब एक नोड का विस्तार, बच्चों शायद एक और नोड के बाद खत्म हो जाएगा , जहां वे रहते हैं।

यदि आपको हेडर फ़िल्टर खोज लागू करने की आवश्यकता है तो मैंने कुछ दिन पहले here पर एक और प्रश्न का जवाब दिया था।

0

मेरे पास एक ही समस्या है, जिसमें 3-स्तर पदानुक्रम है। मैंने काम करने के लिए बिन्के के समाधान को प्राप्त करने की कोशिश करने में काफी समय बिताया, लेकिन इसके परिणामस्वरूप निम्न पदानुक्रम तत्वों को एक साथ समूहित किया गया, जबकि प्रथम और दूसरे स्तर के लोगों ने क्रमबद्ध काम किया लेकिन मुद्दों पर। अंततः मैंने तय कर लिया कि यह सिर्फ सर्वर साइड छंटाई उपयोग करने के लिए सबसे अच्छा है, और इसलिए मेरे ऑन-तरह विधि सचमुच चुने हुए स्तंभ सेट से सॉर्ट करने के लिए और ग्रिड ताज़ा करता है:

grid.onSort.subscribe(function(e, args) { 
    sortColumn = args.sortCol.field; 
    refreshCasesList(); 
}); 

मैं एक ही सलाह देते हैं।