2013-06-03 16 views
5

Is output="false" necessario per tutto il metodo CFC scritto in CFML? o andrebbe bene fino a quando la funzione più esterna del chiamante ha output="false"?è output = falso necessario per tutto il metodo cfc scritto in CFML?

Cosa succede se non aggiungiamo output="false" su alcun metodo CFC, ma ci assicuriamo che il chiamante più in alto si trovi all'interno di un blocco <cfsilent>? va bene?

È output="false" esclusivamente per sopprimere gli spazi? Ricordo anni fa che il CFer ha detto che avere output="false" aiuta a prevenire la perdita di memoria: mito o fatto?

risposta

4

Purtroppo, in Adobe ColdFusion, output="false" a livello di componente non influisce ogni singola funzione, solo l'area di costruzione. Questo potrebbe anche non essere importante perché non riesco a pensare a un modo per generare qualcosa dal costruttore, e anzi, anche il passaggio a output="true" sembra non fare alcuna differenza.

Ora ho (grazie a voi, Henry) sperimentato con concatenamento di funzioni con output="false" e i tuoi sospetti sono corretti: una funzione di chiamata con output="false" eliminerà l'output da qualsiasi funzione che chiama. Questo era in Adobe ColdFusion 9.0.1.

L'aggiunta di un cfsilent all'inizializzazione di un componente consente di escludere l'uscita dal componente senza un output="false", ma di nuovo non penso che faccia nulla. Mettendo intorno a una chiamata di funzione si silenzia qualsiasi uscita da qualsiasi cosa chiami.

output="false" è esclusivamente per la soppressione spazi bianchi. Si potrebbe obiettare che l'aggiunta di spazi bianchi al buffer di output aumenterebbe l'utilizzo della memoria, a richiesta, ma in realtà non lo chiamerei una perdita - forse se si hanno decine di migliaia di chiamate componente/funzione, potrebbe causare problemi.

Output="true" ha un effetto diverso, considera una funzione come se contenga i tag <cfoutput> e valuta automaticamente le cose dinamiche #.

+1

In qualche modo fuorviante implementazione dell'attributo, a mio parere. 'whitespace = 'false'' avrebbe dovuto essere usato invece ... e' output =' false'' è il caso predefinito. – Manaus