Таким образом, учитывая, что у меня есть экземпляр этого компонента:Как определить контекст, в котором находится объект ColdFusion?
foo.cfc
<cfcomponent>
<cffunction name="locateMe">
<cfreturn "I don't know where I live!">
</cffunction>
</cfcomponent>
И, этот другой компонент, fooParent.cfc:
<cfcomponent>
<cfset this.foo = createObject("component", "foo")>
</cfcomponent>
Допустим, я создаю экземпляры «foo» несколько различных способов:
<cfset myStruct = {}>
<cfset myStruct.foo = createObject("component", "foo")>
<cfset myFoo = createObject("component", "foo")>
<cfset myFooParent = createObject("component", "fooParent")>
<cfoutput>
#myStruct.foo.locateMe()#<br>
#myFoo.locateMe()#<br>
#myFooParent.foo.locateMe()#<br>
</cfoutput>
Как и ожидалось, th есть выходы:
I don't know where I live!
I don't know where I live!
I don't know where I live!
То, что я хочу знать, что я могу сделать, возможно, в foo.cfc, что скажет мне что-то (что-нибудь!) о том контексте, в котором в настоящее время вызывается? Поскольку все в конечном итоге живет (по крайней мере) в какой-то области, и все области являются своего рода объектом, я говорю о том, что Мне бы очень хотелось каким-то образом определить содержащийся объект из определенного объекта-объекта. В конце концов, какой-то способ построения foo.cfc так, что нечто подобное может быть мой выход из моего образца сниппета выше:
I live within a "class coldfusion.runtime.Struct" instance!
I live within a "class coldfusion.runtime.VariableScope" instance!
I live within a "component cfjunk.fooParent" instance!
Где каждый из этих значений может быть определена путем проверки результата от прохождения getMetaData
фактический содержащий ссылка на объект.
Обновление Как было предложено Micah в комментариях, я добавил к этому тег Java, поскольку я подозреваю, что он может быть прав в том, что решение может заключаться в использовании Java для самоанализа.
Update
Вместо того, чтобы оставить это как то, что, как представляется, чисто-научной дискуссии, позвольте мне объяснить, почему мне это нужно.
Я использую CFWheels ORM с включает в себя, чтобы получить обратные ссылки на мои данные, как так:
var user = model("User").findOne(where="id=123", include="AuthSource", returnAs="object");
Это вернет мне объект, который я могу ссылаться, как так:
user.id // property of the "User" model
user.reset() // method on the "User" model
user.AuthSource.id // property of the "AuthSource" model
user.AuthSource.authenticate(password) // method on the "AuthSource" model
Теперь, в моем методе «AuthSource.authenticate», я хотел бы узнать о объекте «Пользователь», в котором я содержался. В противном случае, я в конечном итоге, для вызова функции, как это, вместо того, чтобы:
user.AuthSource.authenticate(user, password) // note the redundancy in the use of "user"
я должен быть в состоянии рассчитывать на то, что я звоню метод на модели через авторизацию источника объект пользователя и на самом деле читать от этого объекта изнутри этого метода.
Большой вопрос. Интересно, может ли JAVA иметь какую-то интроспекцию, такую как функции для определения такого рода вещей. Возможно, вы можете расширить свой вопрос, добавив тег java. – Micah
Почему случайный случайный вопрос по этому вопросу? Как странно .... –