It's by design. The object knows what it can call internally.
OnMissingMethod() is intended for external method calls only.

On 1/8/08, Baz <[EMAIL PROTECTED]> wrote:
> I wonder if that's a design decision or an architectural limitation.
>
>
> On Jan 8, 2008 4:06 PM, Baz <[EMAIL PROTECTED]> wrote:
>
> > After your comment I retested hard-coding (not mixing in) the
> > onMissingMethod() and the results were the same actually. Thanks Mark!
> >
> >
> >
> > On Jan 8, 2008 3:59 PM, Mark Mandel < [EMAIL PROTECTED]> wrote:
> >
> > >
> > > Baz,
> > >
> > > That's actually just the way that onMM() works.
> > >
> > > Firing a method from inside a CFC won't trigger the onMissingMethod()
> > > call if it doesn't exist.  Only calls from outside the instance, and
> > > as you put it, on the 'this' scope fire the onMM.
> > >
> > > The only workaround is to use a this.methodname() approach to fire the
> > > onMM.
> > >
> > > Mark
> > >
> > > On Jan 9, 2008 10:45 AM, Baz <[EMAIL PROTECTED] > wrote:
> > > > If you mixin onMissingMethod() into a new object, then try to call
> > > some
> > > > nonExistentMethod() from within your new object, the onMissingMethod()
> > > > function does not get invoked and an error is thrown. However if you
> > > scope
> > > > that method call with the "THIS" scope: THIS.NonExistentMethod() it
> > > works
> > > > again. And if you call a missing method from another file outside the
> > > object
> > > > it works too. So basically the issue arises while trying to invoke a
> > > non
> > > > existent method through the "VARIABLES" scope. Is this normal and
> > > expected?
> > > > Has anyone seen this before? I know that if the onMissingMethod() was
> > > coded
> > > > directly into the CFC and not mixed in, this would not cause an issue.
> > >
> > > >
> > > > Here is my test case:
> > > >
> > > > I have 2 components:
> > > >
> > > > Mixin.cfc
> > > > Object.cfc Mixin.cfc simply contains the onMissingMethod() function:
> > > >
> > > >  <cfcomponent>
> > > >     <cffunction name="onMissingMethod" output="true">
> > > >         <cfreturn arguments />
> > > >      </cffunction>
> > > >  </cfcomponent>
> > > >
> > > > Object.cfc contains 2 functions, one to perform the mixin (a la
> > > Corfield)
> > > > and one for testing:
> > > >
> > > > <cfcomponent>
> > > >     <cfscript>
> > > >       function mixin() {
> > > >           var target = createObject("component",'test.mixin.mixin1');
> > > >           structAppend(this,target);
> > > >           structAppend(variables,target);
> > > >       }
> > > >     </cfscript>
> > > >
> > > >      <cffunction name="testMissingMethod">
> > > >          <cfreturn NonExistentMethod() />
> > > >     </cffunction>
> > > > </cfcomponent>
> > > >
> > > >  And lets say we have a third file index.cfm for testing these
> > > components:
> > > >
> > > >  <!--- create object --->
> > > > <cfset ObjectInstance=createobject('component', ' test.mixin.cfc1') />
> > > >
> > > > <!--- mixin onMissingMethod() --->
> > > >  <cfset ObjectInstance.mixin() />
> > > >
> > > > Now here's the weirdness.
> > > >
> > > > If you try to call a non-existent method from the index.cfm everything
> > > works
> > > > fine:
> > > >
> > > >  <cfdump var="#ObjectInstance .someRandomMethodName()#"> (success,
> > > > onMissingMethod() is invoked)
> > > >
> > > > However, if you try to call a missing method from within the object
> > > itself,
> > > > the following error is thrown "Variable ZIZI is undefined":
> > > >
> > > >
> > > > <cfdump var="# ObjectInstance .testMissingMethod ()#"> (error)
> > > >
> > > > Now if you modify the testMissingMethod() function slightly by scoping
> > > the
> > > > method call with "this", like so:
> > > >
> > > >      <cffunction name="testMissingMethod">
> > > >         <cfreturn THIS.NonExistentMethod() />
> > > >      </cffunction>
> > > >
> > > > The function works again:
> > > >
> > > >  <cfdump var="# ObjectInstance. testMissingMethod()#"> (success, now
> > > it
> > > > works because we scope the inner method call with "THIS")
> > > >
> > > > Cheers,
> > > >  Baz
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >  >
> > > >
> > >
> > >
> > >
> > > --
> > > E: [EMAIL PROTECTED]
> > > W: www.compoundtheory.com
> > >
> > > > >
> > >
> >
>
> >
>


-- 
Sean A Corfield -- (904) 302-SEAN
An Architect's View -- http://corfield.org/

"If you're not annoying somebody, you're not really alive."
-- Margaret Atwood

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"CFCDev" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/cfcdev?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to