ExtJs - चेकबॉक्स चयन मॉडल, प्रति पंक्ति चेकबॉक्स अक्षम करें

मेरे पास चेकबॉक्स चयन मॉडल वाला ग्रिड है।

Ext.define('Mb.view.ship.OrdersGrid', {
    extend: 'Ext.grid.Panel',
    selType: 'checkboxmodel',
    selModel: {
        injectCheckbox: 0,
        pruneRemoved: false
    },
    ...

ऐसी कुछ पंक्तियां हैं जो फ़ील्ड में किसी मान के आधार पर चुनिंदा नहीं हो सकती हैं।

एक सामान्य कॉलम में, मैं renderer के साथ डिस्प्ले में हस्तक्षेप कर सकता हूं और सीएसएस ( metadata.tdCls ) के साथ सेल सामग्री को छुपा सकता हूं, लेकिन ऑटो जेनरेट किए गए चेकबॉक्स कॉलम के लिए, मैं नहीं कर सकता पंक्ति के आधार पर चेकबॉक्स को अक्षम या छिपाने के लिए एक विधि खोजें।

क्या किसी को यह पता है कि यह कैसे करना है?

4
@rixo नहीं, यह एक डुप्लिकेट प्रश्न नहीं है। ExtJs में एक कॉलम प्रकार चेककॉम है और checkboxmodel नामक एक चयन मॉडल है। मेरा प्रश्न बाद वाले को संदर्भित करता है, जबकि दूसरा प्रश्न पहले को संदर्भित करता है।
जोड़ा लेखक Lorenz Meyer, स्रोत
तुम सही हो, माफ करना मैंने इसे नहीं देखा है।
जोड़ा लेखक rixo, स्रोत

3 उत्तर

आप बस ग्रिड के beforeselect ईवेंट का उपयोग करते हैं। झूठी वापसी, चयन की अनुमति नहीं देगा। दस्तावेज़ देखें ।

Ext.define('Mb.view.ship.OrdersGrid', {
    extend: 'Ext.grid.Panel',
    selType: 'checkboxmodel',
    selModel: {
        injectCheckbox: 0,
        pruneRemoved: false
    },

    listeners: {

        beforeselect: function(grid, record, index, eOpts) {
            if (record.get('yourProperty')) {//replace this with your logic.
                return false;
            }
        }

}
..........

यदि आप वास्तव में चेकबॉक्स को छिपाना चाहते हैं, तो आप अपनी ग्रिड पंक्तियों के लिए सीएसएस कक्षाएं जोड़ सकते हैं, और उनका उपयोग करके आप उन्हें छुपा सकते हैं। यह उत्तर एक समाधान के लिए।

5
जोड़ा
मेरा जवाब अपडेट किया गया।
जोड़ा लेखक Andrei I, स्रोत
वस्तुतः आपका क्या मतलब है? यदि आप HTML में हैं, तो ... किसी को इसकी आवश्यकता क्यों होगी?
जोड़ा लेखक Andrei I, स्रोत
हां लेकिन आप चेकबॉक्स को कैसे सेट करें ताकि यह अक्षम दृश्य दृष्टि से हो?
जोड़ा लेखक feeling unwelcome, स्रोत
धन्यवाद, यह पहले से ही आंशिक समाधान है। लेकिन उपयोगकर्ता नहीं जानता कि वह क्लिक किए बिना चुन सकता है या नहीं। चयन संभव है या नहीं, यह दिखाने के लिए एक दृश्य संकेतक होना चाहिए।
जोड़ा लेखक Lorenz Meyer, स्रोत

ExtJS 6 ओवरराइडिंग renderer नहीं काम करेगा।

GetRowClass के साथ आप viewConfig को परिभाषित करके उस पर जा सकते हैं:

            getRowClass: function(record) {
                var classes = '';
                if (!record.get('available')) {
                    classes += ' selection-disabled';
                }
                return classes;
            }

फिर अपने सीएसएस में यह जोड़ें:

.selection-disabled .x-selmodel-column {
    visibility: hidden;
}

वह चयन चेकबॉक्स छुपाएगा।

अब पंक्ति पर क्लिक करके चयन अक्षम करने के लिए मानक विधि का उपयोग करें। अर्थात। एक beforeselect श्रोताओं को selModel में जोड़ें:

        selModel: {
            selType: 'checkboxmodel',
            showHeaderCheckbox: false,
            listeners: {
                beforeselect: function(grid, record) {
                    if (!record.get('available')) {
                        return false;
                    }
                }
            }
        },
2
जोड़ा
महान कामकाज धन्यवाद
जोड़ा लेखक andresarenasv, स्रोत

चेकबॉक्स चयन मॉडल में एक renderer भी है।

var sm = new Ext.grid.CheckboxSelectionModel({
        checkOnly : true,
        renderer : function(v,p,record) {
       //First condition : show
        if (record.data.XXX == 'YYYY') return '<div class="x-grid3-row-checker"> </div>';
       //else hide 
        else return '';
    },
    header: ''
});

https://www.sencha.com/forum/showthread.php?122496-How-to-hide-certain-checkbox-in-a-CheckboxSelectionModel

खाली लौटने '' चेकबॉक्स चयन को अक्षम करता है, न केवल इसे छुपाकर बल्कि <div> अचयनित = "को" div/dis>

इसे Ext.define (कभी विस्तार करने की आवश्यकता नहीं थी) के अंदर करने के बारे में नहीं पता, लेकिन संभव लगता है।

UPDATE: Despite having unselectable="on", clicking on the row (if enabled), or using the header checkbox (select-all) will select "disabled" rows. It may be a good idea to implement a listener then.

1
जोड़ा