8

cfscript で関数として定義されている CFC のメソッドはデフォルトで output=false であると思っていましたが、cfcexplorer.cfc で CFC を開くと (ブラウザで CFC に直接アクセス)、Output: enabled と表示されます。

cfcexplorer.cfc のバグ?

4

3 に答える 3

18

短い答え: 関係ありません。

cfscript明示的に writeOutput() を呼び出さない限り、何も出力しません。これには、関数内の関数cfscriptだけでなくcfscript、関数外のコードも含まれます。

これは、デフォルトでタグ間に少なくとも空白を出力する CF タグの構文とは異なります。ではcfscript、記述したテキストはすべて CFML エンジンによってコンパイルされます。CF タグでは、記述したテキストはすべて出力バッファーに書き込まれ、ブラウザーに送信されます。

長い答え: 出力属性を指定しないのと同じです。

cfscriptブロックは何も出力しません。タグブロックは、 でラップされていない限り、cfsilent他に何もない場合は空白を出力します。はい、cffunctions でも可能ですが、output 属性が false に設定されている場合、出力は破棄されます。

Peter Boughtonの答えの本質は正しいです。またはでラップされていcfsilentませんcfoutput。出力は禁止されていませんが、明示的に行わない限り発生しません。

タグベースとスクリプトをいつでも組み合わせてcffunction、両方の長所を活かすことができます。何かのようなもの...

<cffunction name="x" output="false" access="package">
    <cfargument name="y" type="string" required="false" default="YY" />
    <cfscript>
        var someValue = y & "something";
        writeOutput("test"); // this will not be written
        return someValue;
    </cfscript>
</cffunction>

これにより、タグで出力とアクセスを指定できるcffunctionだけでなく、引数をオプションにすることもできます (これは関数を介して行うことはできませんcfscript)。次に、var ステートメントと関数 return を含む cfscript で本文を埋めます。

もちろん、その関数については、output属性を削除するか に変更するとtrue、返される前に " "出力されます。test

于 2009-06-10T21:46:39.763 に答える
4

cfscript 関数は奇妙なサルです。彼らは両方のようなものです。それらが output="false" であることを指定することはできませんが、writeOutput() を使用するまで指定できませんが、cfcexplorer によって output="true" としてレポートされます。これは、cfml 諮問委員会が現在検討していると思われる奇妙な問題です。

于 2009-06-10T21:16:42.583 に答える
1

私は完全に確信しているわけではありませんが、スクリプト関数はcffunctionこの点でタグと同じであると推測しています.デフォルトはどちらtrueでもありませんfalse.

outputの属性を設定するcffunctionと、次のようになります。

  • trueでラップされている関数と同等cfoutputです。
  • falseでラップされている関数と同等cfsilentです。
  • デフォルト (未定義) のままにしておくことは、 または でラップされていない標準コードと同等cfoutputですcfsilent

ただし、私は をほとんど使用cfscriptしません。また、実際にはそうではない可能性もあります。他の人がやって来て、これを確認または修正するのを待つ必要があります。

于 2009-06-10T20:51:16.770 に答える