In CF10, desidero accedere a un oggetto Test variabile utilizzando la funzione onMissingMethod nell'oggetto TestHelper, ma viene visualizzato un errore.L'utilizzo di onMissingMethod non può accedere alle variabili dell'oggetto
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);
}
}
Chiamando l'oggetto
obj = new TestHelper();
writeOutput(obj.getX()); //Element INSTANCE.X is undefined in VARIABLES
In CF10, questo mi dà un errore che elemento di X non è definito in caso. Non sembra riconoscere l'istanza della variabile. Potrei definire esplicitamente la funzione getX in TestHelper, ma speravo di poter utilizzare la funzione onMissingMethod.
Sto fraintendendo come dovrebbe funzionare onMissingMethod? FWIW, il codice funziona in Railo.
Adam, hai ragione (come al solito). Quando l'ho provato su Railo, in realtà stavo facendo 'return variables.testObj [arguments.missingMethodName] (argumentCollection = arguments.missingMethodArguments);'. Ma a CF10 non piace questo codice, quindi ho pensato di poter assegnare il metodo a una variabile func e quindi chiamarlo sulla riga successiva. Non mi rendevo conto che fare così toglie il metodo dal suo contesto. Grazie per il chiarimento. Molto apprezzato. – user2943775
Nessun problema. Sì, abbiamo cercato di convincere Adobe ad aggiungere la sintassi, ma non l'avrebbero fatto. Esiste 'invoke()', che potrebbe essere d'aiuto? https://wikidocs.adobe.com/wiki/display/coldfusionen/Invoke –