2015-04-29 7 views
5

CF10 में, मैं TestHelper ऑब्जेक्ट में MissingMethod फ़ंक्शन का उपयोग कर एक वेरिएबल टेस्ट ऑब्जेक्ट तक पहुंच बनाना चाहता हूं, लेकिन मुझे एक त्रुटि मिल रही है।onMissingMethod का उपयोग ऑब्जेक्ट वेरिएबल्स तक नहीं पहुंच सकता

Test.cfc

component { 

public Any function init(){ 
    instance = { x = 1 }; 
    return this; 
} 

public numeric function getX(){ 

    return instance.x; 

} 

} 

TestHelper.cfc

component { 

public Any function init(){ 
    variables.testObj = new Test(); 
    return this; 
} 

public any function onMissingMethod(required string missingMethodName, required struct missingMethodArguments){ 

    var func = variables.testObj[ arguments.missingMethodName ]; 
    return func(argumentCollection = arguments.missingMethodArguments); 

} 

} 

वस्तु

obj = new TestHelper(); 
writeOutput(obj.getX()); //Element INSTANCE.X is undefined in VARIABLES 

CF10 में कॉलिंग, यह मुझे एक त्रुटि उस तत्व एक्स उदाहरण में अपरिभाषित है देता है। यह चर आवृत्ति को पहचानने के लिए प्रतीत नहीं होता है। मैं टेस्टहेल्पर में getX फ़ंक्शन को स्पष्ट रूप से परिभाषित कर सकता था, लेकिन मुझे उम्मीद थी कि मैं ऑनमिशन मोड विधि का उपयोग कर सकता हूं।

क्या मैं गलत समझ रहा हूं कि MissingMethod को यहां कैसे काम करना चाहिए? एफडब्ल्यूआईडब्ल्यू, कोड रेलो में काम करता है।

उत्तर

2

यदि मैं आपकी समस्या को समझता हूं, तो मुझे आश्चर्य है कि यह कोड रेलो पर चलता है। मुझे नहीं लगता कि यह चाहिए।

मुद्दा इस कोड के साथ है:

var func = variables.testObj[ arguments.missingMethodName ]; 
return func(argumentCollection = arguments.missingMethodArguments); 

यहाँ आप variables.testObj से बाहर समारोह getX() खींच रहे हैं, और अपने TestHelper उदाहरण के संदर्भ में यह चल रहा है। और उस ऑब्जेक्ट में 'variables.x नहीं है। इसलिए त्रुटि।

आपको funcvariables.testObj में संदर्भ डालना होगा, इसमें से getX खींचें नहीं। तो इस तरह:

var variables.testObj.func = variables.testObj[ arguments.missingMethodName ]; 
return variables.testObj.func(argumentCollection = arguments.missingMethodArguments); 

इस तरह आप func() चला रहे हैं सही संदर्भ में (अपने getX() करने के लिए प्रॉक्सी), तो यह variabales.x.

इस स्थिति को देखते हुए देखेंगे, वहाँ कोई रास्ता नहीं इस कोड पर काम करना चाहिए है रेलो (उस जानकारी के आधार पर जो आपने हमें सभी प्रासंगिक जानकारी दी है, किसी भी तरह)।

+0

एडम, आप सही (हमेशा की तरह) हैं। जब मैंने रेलो में इसका परीक्षण किया, तो मैं वास्तव में 'वापसी चर ..testObj [arguments.missingMethodName] कर रहा था (तर्क चयन = तर्क। MissingMethodArguments); '। लेकिन सीएफ 10 को इस कोड को पसंद नहीं है, इसलिए मैंने सोचा कि मैं सिर्फ एक वैरिएबल func को विधि असाइन कर सकता हूं और फिर इसे अगली पंक्ति पर कॉल कर सकता हूं। मुझे एहसास नहीं हुआ कि ऐसा करने से विधि इसके संदर्भ से बाहर हो जाती है। स्पष्टीकरण के लिए धन्यवाद। बहुत सराहना की। – user2943775

+0

कोई जांच नहीं। हाँ, हमने एडोब को उस वाक्यविन्यास को जोड़ने की कोशिश की, लेकिन वे नहीं करेंगे। हालांकि 'invoke() 'है, जो मदद कर सकता है? https://wikidocs.adobe.com/wiki/display/coldfusionen/Invoke –

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