La invocación de una función de componente

Si invoca una función de componente mediante la etiqueta CFINVOKE, ColdFusion crea una instancia de ese componente y llama a la función llamada en el atributo de método. En esencia, ColdFusion instancia de un objeto de la clase de ese componente, pero el nombre de ese objeto es invisible para ti. (Es internamente mediante ColdFusion Server.) Si utiliza CFINVOKE para llamar a las tres funciones de un componente en una única plantilla de ColdFusion, como se muestra en el código, ColdFusion Server crea tres instancias independientes de ese componente para darle lo que quiere, y eso es no muy eficiente.


   
   
   
   
   
   
   
 
  

La forma correcta de llamar a las funciones de un componente varias veces desde una única plantilla por separado una instancia de un objeto con un nombre formal y luego llamar a las funciones de una instancia que a medida que los necesitan. El código de muestra de este principio en acción. Observe que el atributo componente de las referencias etiqueta CFINVOKE una instancia del componente más que el propio componente.


   

   
   
   
   
   
   
 

Puede crear una única instancia del componente de la empresa que persiste durante el tiempo que la solicitud de la página actual dura, entonces simplemente llamar a las funciones de la instancia que uno tantas veces como sea necesario. Después de la solicitud de la página actual termine, ColdFusion destruye automáticamente la instancia que usted cree. (En la parte siguiente, a aprender a hacer sus instancias de componente vivir más tiempo.) Uso de la etiqueta CFOBJECT no es la única manera de crear una instancia de un objeto. La función CreateObject () devuelve un objeto también. Las siguientes tres líneas de código, por ejemplo, producen los mismos resultados:

 myCompany = CreateObject ( "Componente", "Compañía"); 

Del mismo modo, utilizando CFINVOKE no es la única manera de invocar una función de componente. Después de crear una instancia de un componente, puede llamar a sus métodos mediante simple notación de puntos. El código, por ejemplo, devuelve la lista de empresas producidos por la ListCompanies función a una variable llamada listOfCompanies.

 myCompany = CreateObject ( "Componente", "Compañía"); listOfCompanies = myCompany.ListCompanies ( 'A'); 

De hecho, el código es probablemente la forma más popular de trabajo con funciones de componentes para los desarrolladores de ColdFusion que están versados en lenguajes orientados a objetos, como la sintaxis es muy parecida a la forma en que Java y C + + instancias de objetos y llamar a sus métodos. Puede acceder directamente a funciones de los componentes a través de formularios y direcciones URL, pero los resultados son básicamente inútiles. En lugar de definir un valor de retorno de pasar de su función a la llamada a la función que lo invoca, debe presionar contenido visualizable directamente del cuerpo de la función, como se muestra en el código.

 SELECCIONAR companyId, CompanyName, dirección, ciudad, estado, código postal, Observaciones de la empresa ORDER BY CompanyName  

# # CompanyName:
Comentarios # #

Este tipo de codificación es algo desagradable, amigos. No lo hagas. El poder real de productoras de contenido las funciones, ya sean locales a una plantilla o encapsulado dentro de un componente, viene de regreso que figura en el contenido de una variable compleja de un tipo de datos específico y luego combinar el contenido con el código. La separación de la lógica de la presentación (y, por extensión, los datos de la presentación) debería ser su mantra. Si es absolutamente necesario crear una función que el contenido directamente los resultados, quite el atributo de la etiqueta ReturnType CFFUNCTION y agregar salida = "Sí". Nunca tanto un tipo de retorno y salida directa en la misma función. El atributo de salida en realidad tiene los siguientes tres estados:

De salida = "Sí" trata a toda la función como si estuviera dentro de un par de etiquetas CFOUTPUT.

De salida = "No" trata a toda la función como si estuviera dentro de un par de etiquetas CFSILENT.

La eliminación del atributo de salida completamente permite etiquetas CFOUTPUT explícita dentro de la función a la pérdida de la producción a la persona que llama.

No hemos sido explícito acerca de la salida atributo todavía porque se trata de un artículo de aprendizaje, y queremos eliminar el código ajeno tanto como sea posible de manera que pueda enfocar su concentración en temas específicos. En las partes anteriores de este artículo, usted aprenderá a crear una instancia de un componente, averiguar sobre los fundamentos de las propiedades de instancia en un componente de este alcance, y aprender las diferencias entre los métodos de la clase y métodos de instancia. Ahora bien, para poner estas teorías en la acción! La instancia del componente que se crea en el código sólo persiste mientras la solicitud de la página y, a continuación ColdFusion Server automáticamente lo destruye. Si desea trabajar con un componente persistente pasado una solicitud de página única, simplemente hay que crearlo en un ámbito de aplicación persistente de que la vida de más de una solicitud, como se muestra en el código.

 Session.myCompany = CreateObject ( "Componente", "Compañía"); listOfCompanies = Session.myCompany.ListCompanies ( 'A'); 

Ahora este caso persiste mientras la sesión del usuario lo hace, lo que significa que sus propiedades también lo hagan. Esto significa que usted puede ejecutar un plantilla de ColdFusion, que crea una instancia del componente de la empresa, ir a tomar una taza de café, ejecutar una segunda ColdFusion plantilla que invoca una función de ese componente, vaya una oferta en eBay, ejecutar un tercio la plantilla de ColdFusion que invoca otra función de dicho componente, y así sucesivamente, hasta que se detiene más tiempo que sus permisos de tiempo de espera de sesión y se destruye la instancia. Esta es la razón por la que se refieren a la empresa como un componente de larga vida persistente. Los componentes también se pueden conservar en el ámbito de aplicación también. Sólo recuerde que todos los usuarios de su solicitud de utilizar la misma instancia del componente, por lo que el bloqueo se hace más crítico y los cuellos de botella de rendimiento potencialmente convertido en una preocupación si el componente manipula las propiedades en su ámbito de aplicación Este. Apostamos que, ahora mismo, " pensando: "Soy la agrupación mi solicitud, lo que significa que yo no uso las variables de sesión en cualquier lugar, así que voy a persistir mi instancia del componente serializar con WDDX y almacenarlo en el ámbito de aplicación de cliente." Esa es una inteligente idea, pero por desgracia, no funciona. Si se serializa una instancia del componente, las propiedades en el ámbito de aplicación del presente serializar bien, pero usted pierde todas sus funciones, por lo que en la deserialización, todos a volver son las propiedades.

un artículo presentado por Peter Andrews


Descargo de responsabilidad:Nuestro sitio web no es responsable por el contenido de este artículo. Webarticles es un recurso de información gratuito.
Importante: Este artículo "Invocación de un componente de función", fue traducida por un software automático. Sentimos pena por los errores de ortografía que pueda haber ocurrido. Gracias por su comprensión.


Online: 522 users browsing the articles directory