2011-02-16 12 views
8

क्या ExtJS को कॉन्फ़िगर करने का कोई तरीका है (एक Ext.override के माध्यम से?) ताकि सबमिट करने के लिए Ext.form.Action.Submit के लिए guarantEextyText कॉन्फ़िगरेशन विकल्प डिफ़ॉल्ट रूप से गलत है?Ext.form.Action.Submit पर एक डिफ़ॉल्ट कॉन्फ़िगरेशन विकल्प को ओवरराइड कैसे करें?

मुझे पता है कि कक्षाओं पर विधियों को ओवरराइड करना संभव है लेकिन मुझे डिफ़ॉल्ट कॉन्फ़िगरेशन गुणों के बारे में पता नहीं है, तो कोई ऐसा सोच सकता है कि चूंकि कॉन्फ़िगरेशन विकल्प अधिकतर सार्वजनिक गुण हैं जो लॉग इन कंसोलिंग Ext.form.Action.Submit.submitEmptyText झूठी आउटपुट करेगा लेकिन यह अपरिभाषित है।

एक तरीका जिस तरह से मैं सफल हुआ, रन विधि के लिए एक इंटरसेप्टर बनाकर है, लेकिन मूल रूप से submitEmptyText कॉन्फ़िगरेशन विकल्प बेकार है क्योंकि इसे अब कन्स्ट्रक्टर को पास की गई कॉन्फ़िगर ऑब्जेक्ट के माध्यम से सेट नहीं किया जा सकता है।

Ext.form.Action.Submit.prototype.run = Ext.form.Action.Submit.prototype.run.createInterceptor(function() { 
    this.options.submitEmptyText = false; 
}); 

उत्तर

8

[कई बार संपादित किया गया है, लेकिन यह मेरे लिए काम करता है]

submitEmptyText वास्तव में Ext.form.Action.Submit प्रोटोटाइप की संपत्ति नहीं है - यह बस के रूप में चलाने के समारोह में चेक किया गया है "this.options" ऑब्जेक्ट की एक संपत्ति - जिसे सुपरक्लास, Ext.form.Action

पर परिभाषित किया गया है, यदि आप इसे डिफ़ॉल्ट रूप से वैश्विक स्तर पर गलत होना चाहते हैं, तो बस इसे Ext के विकल्प गुण पर सेट करें .form.Action के निर्माण के बाद

Ext.form.Action.prototype.constructor = Ext.form.Action.prototype.constructor.createSequence(function() { 
    Ext.applyIf(this.options, { 
     submitEmptyText:false 
    }); 
}); 

यह मुश्किल है, क्योंकि Ext.form.Action इसे अपने कन्स्ट्रक्टर में एक खाली ऑब्जेक्ट पर सेट करता है, इसलिए आपको कन्स्ट्रक्टर निष्पादित करने के बाद उस विकल्प प्रॉपर्टी तक पहुंच प्राप्त करनी होगी, यही कारण है कि इस मामले में CreateSequence काम करता है।

+0

यह अपेक्षित के रूप में काम करता है! दरअसल submitEmptyText प्रॉपर्टी को घटक कॉन्फ़िगरेशन विकल्प की तरह लागू नहीं किया गया है, यही कारण है कि Ext.override काम नहीं करता है, दूसरी तरफ यह पूरी तरह से काम करता है! धन्यवाद! – ChrisR

+0

अच्छा सौदा ... खुशी है कि आपको यह सही जवाब के लिए –

+0

+1 पर काम कर रहा है! – JamesHalsall

1

आप Ext.form.Action.submit से submitEmptyText चाहते हैं गलत, बस config में सेट है जब आप Ext.form.Action.submit वस्तु बनाने के।

var submit = Ext.form.Action.submit({ 
    submitEmptyText: false 
}); 
+0

Ext.override इस मामले में Ext.form.Action (ओं) पर काम नहीं करता है, submitEmptyText संपत्ति Ext में अलग-अलग लागू की गई है। – ChrisR

3

आप सभी उदाहरणों तो क्यों नहीं बस एक Ext.override का उपयोग के लिए Ext.form.Action.submit() ओवरराइड करने के लिए चाहते हैं?

Ext.override(Ext.form.Action.submit, { 
    submitEmptyText: false 
}); 
+1

Ext.override इस मामले में Ext.form.Action (ओं) पर काम नहीं करता है, submitEmptyText प्रॉपर्टी को Ext में अलग-अलग लागू किया गया है। – ChrisR

0

यह बहुत ओवरराइड उपयोग करने के लिए बोल्ड है, लेकिन अगर आपको लगता है कि सही तरीके से बदल जाता है का प्रबंधन करने में सक्षम हैं:

 
Ext.override (Ext.form.Action.submit, { 
    submitEmptyText: false 
}); 

यह अगर जरूरत सच करने के लिए इस सेटिंग को उल्टा करने दूँगी। मैं भी हो सकता है कि http://edspencer.net/2009/07/extoverride-monkey-patching-ext-js.html

0

पढ़ने के लिए सुझाव देते हैं:

Ext.form.Action.submit.prototype.submitEmptyText = false. 

यह मेरे साथ मदद करता है:

Ext.Window.prototype.constrainHeader = true; 
संबंधित मुद्दे