2012-11-18 10 views
9

हमारी कंपनी कुछ समय पहले dojox/DataGrid से dgrid पर चली गई। अब हम पता लगा रहे हैं, dgrid बॉक्स से बाहर डिजिट/डोजॉक्स विजेट का समर्थन नहीं कर रहा है।डोजो ड्रिग के अंदर विजेट

dojox/DataGrid में formatter() है जो एक विजेट लौटा सकता है। वहां ऐसा करना इतना आसान है! API comparison on GitHub कहते

"dgrid फ़ॉर्मेटर कार्यों का समर्थन करता है, लेकिन एक विजेट उन्हें .dgrid भी renderCell, जो वापसी एक डोम नोड के लिए आशा की जाती है है से लौटने का समर्थन नहीं करता। यह जाहिरा तौर पर प्रदर्शित करने के लिए इस्तेमाल किया जा सकता विजेट (और संपादक कॉलम प्लगइन वास्तव में यह करता है)। ध्यान दें कि सेल संपादन उद्देश्यों के लिए , संपादक कॉलम प्लगइन का उपयोग अत्यधिक प्रोत्साहित किया गया है। "

वास्तव में कैसे?

मैंने {editor: ' ', editorArgs:' '} के साथ संपादक प्लगइन का उपयोग करने का प्रयास किया है। यह एक विजेट प्रस्तुत करता है लेकिन बहुत ही सीमित है। उदाहरण के लिए मैं अपने लेबल के सेल के मूल्य के साथ dijit/Button कैसे प्रस्तुत करूं? या कुछ और जटिल, मैं src स्टोर के मूल्य होने के साथ एक फॉर्मेटर फ़ंक्शन से उत्पन्न <img> के साथ dojox/image/MagnifierLite (कम ज्ञात) dojox/image/MagnifierLite का उपयोग कैसे करूं?

उत्तर

14

आप इस नमूना कोड

require(
    [ 
     "dgrid/List", 
     "dgrid/OnDemandGrid", 
     "dgrid/Selection", 
     "dgrid/editor", 
     "dgrid/Keyboard", 
     "dgrid/tree", 
     "dojo/_base/declare", 
     "dojo/store/JsonRest", 
     "dojo/store/Observable", 
     "dojo/store/Cache", 
     "dojo/store/Memory", 
     "dijit/form/Button", 
     "dojo/domReady!" 
    ], 

    function(
     List, 
     Grid, 
     Selection, 
     editor, 
     Keyboard, 
     tree, 
     declare, 
     JsonRest, 
     Observable, 
     Cache, 
     Memory, 
     Button 
    ) { 

     var columns = [ 
      { 
       label:"Actions", 
       field:"id", 
       width: "200px", 
       renderCell: actionRenderCell 
      } 
     ]; 

     var actionRenderCell = function (object, data, cell) { 

      var btnDelete = new Button({ 
       rowId : object.id, 
       label: "Delete", 
       onClick: function() { 
        myStore.remove(this.rowId); 
       } 
      }, cell.appendChild(document.createElement("div"))); 

      btnDelete._destroyOnRemove = true; 

      return btnDelete; 

     } 

     grid = new (declare([Grid, Selection, Keyboard]))({ 
      store: myStore, 
      getBeforePut: false, 
      columns: columns 
     }, "grid"); 

} 
+0

हाँ उपयोग कर सकते हैं! यह काम करता है! धन्यवाद! आपके उदाहरण में आप प्रभावी ढंग से डेंज़ॉक्स/डेटाग्रिड में फॉर्मेटर जैसे रेंडरसेल का उपयोग कर रहे हैं। ड्रिग्रिड के लिए प्रलेखन बताता है कि अगर फॉर्मेटर और रेंडरसेल दोनों लागू होते हैं, तो फॉर्मेटर को अनदेखा किया जाता है। कोई विचार क्यों इसे डिज़ाइन किया गया है? –

+3

यह कोड काम करता है लेकिन मुझे काफी यकीन है कि इसमें स्मृति रिसाव है। [इस उपयोग से बचने के लिए RemoveRow] (https://github.com/SitePen/dgrid/blob/v0.3.15/doc/usage/Working-with-Widgets.md#destroying-rendered-widgets) – sixtyfootersdude

संबंधित मुद्दे