2011-10-06 18 views
20

पर आधारित एक कॉलम पर संपादन अक्षम अक्षम करें मैं पंक्तियों में से अधिकांश के लिए संपादन योग्य चार अंतिम कॉलम के साथ एक ग्रिड पैनल लागू कर रहा हूं। समस्या यह है कि मैं संपादन को अक्षम करने में सक्षम होना चाहता हूं, आइए पहले रिकॉर्ड करें अगर record.get ('status') = 4 जिसे अंतिम रूप दिया गया है और केवल दो कॉलम संपादन योग्य होना चाहिए।ExtJS 4 RowEditing रिकॉर्ड

क्या उन पंक्तियों के लिए संपादन दिखाने में अक्षम करने का कोई तरीका है? मैं सेल एडिटिंग का उपयोग कर ऐसा कर सकता हूं लेकिन रोइंग एडिटिंग प्लगइन का उपयोग करना चाहता हूं।

सादर, क्रिस्टियन

उत्तर

37

उपयोग beforeedit घटना:

grid.on('beforeedit', function(editor, e) { 
    if (e.colIdx === 0 && e.record.get('status') == 4) 
    return false; 
}); 

अद्यतन
समाधान ऊपर rowEditor लिए काम नहीं कर रहा है।
हालांकि आप beforeedit पर अक्षम होने के लिए आवश्यक फ़ील्ड बना सकते हैं। ऐसा करने के लिए आपको पंक्तिबद्ध प्लगइन तक पहुंचने में सक्षम होना चाहिए। निरुपित pluginId प्लगइन करने के लिए:

plugins: [ 
    Ext.create('Ext.grid.plugin.RowEditing', { 
     clicksToEdit: 1, 
     pluginId: 'rowEditing' 
    }) 
], 

अब बस आवश्यक क्षेत्र को निष्क्रिय करता है, तो कुछ शर्तें पूरी की जाएं:

grid.on('beforeedit', function(editor, e) { 
    if (e.record.get('status') === 4){ 
     grid.getPlugin('rowEditing').editor.form.findField('fieldToDisable').disable(); 
    } 
    else{ 
     grid.getPlugin('rowEditing').editor.form.findField('fieldToDisable').enable(); 
    }); 

यहाँ demo है (पहली पंक्ति संपादित करने का प्रयास)।

संपादित

तो JSFiddle से काम नहीं होता, its updated version प्रयास करें।

+1

हां, यह सेल एडिटिंग के लिए काम करेगा। RowEditing के लिए यह केवल प्रति पंक्ति एक बार और प्रति कॉलम पर पहले से ही ट्रिगर करेगा। – Asken

+1

@Asken, आप सही हैं। मेरा जवाब अपडेट किया गया। –

+0

शानदार! एक जादू की तरह काम किया। फॉर्म फ़ील्ड की पकड़ के लिए प्रयास किया लेकिन मुझे FindField-function को याद किया। धन्यवाद! – Asken

1

(पिछले उदाहरण के आधार पर) एक वैकल्पिक तरीका संपादक की beforeedit श्रोता कॉन्फ़िगर करने के लिए है:

listeners: { 
    beforeedit: function(editor, context) { 
     var form = editor.getEditor().form; 
     var field = form.findField('column_name'); 
     var status = parseInt(context.record.data.status); 
     if(status === 4){field.disable();} else {field.enable();} 
    } 
} 
+0

यह @Molecular Man answser – alexandre1985

+0

@ alexandre1985 का पुनरावृत्ति है क्योंकि यह श्रोता को पूरी तरह से परिभाषित नहीं किया गया है; कृपया नीचे मतदान से पहले 'Ext.define' के बारे में जानें। –

+0

@ alexandre1985 कृपया पहले स्थान पर एक्स्टजेस को पढ़ने/लिखने और समझने के लिए सीखें; अब मैंने आपका जवाब नीचे दिया है ... क्योंकि यह स्पष्ट रूप से दिखाता है कि आप किस बारे में बात कर रहे हैं उसके बारे में कितना छोटा संकेत है ... और मैं इस राय के साथ अकेला नहीं हूं :) –

-2

के बाद से @Molecular मैन जवाब बनाता विकलांग स्तंभ थोड़े अजीब जब rowediting संपादित कर रहा है मैं एक और तरीका है के बारे में सोचा देखो यह सही दिखता है। आपको बस इतना करना है एक समारोह, कि उदाहरण के लिए हो सकता है बनाने के है:

var grid = Ext.create('Ext.grid.Panel', { 
    plugins: [grid_rowEditing], 
    store: store, 
    columns: [ 
    { 
     text  : 'Name', 
     dataIndex: 'name', 
     field : fieldFormat() 
    }] 
}); 

और जब isGuest सत्य है:

function fieldFormat() { 
    if(isGuest) { 
     return null; //is not editable 
    } else { 
     //how you want the column's field config to be formated 
     var json = Ext.JSON.decode("{xtype: 'textfield',maxLength: 40}"); 
     return json; 
    } 
} 

और ग्रिड में, आप कुछ इस तरह रखा फ़ील्ड 'नाम' संपादन योग्य नहीं होगा। जब यह गलत होता है, तो यह संपादन योग्य होगा

+0

यह काम करता है, आप मतदान क्यों कर रहे हैं नीचे? – alexandre1985

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