コンポーネントの関数を呼び出す

場合は、cfinvokeタグを使用してコンポーネントの関数を呼び出すと、ColdFusionは、そのコンポーネントのインスタンスを作成し、関数は、メソッドの属性の名前を呼び出します。本質的には、ColdFusionは、そのオブジェクトの名前をあなたには見えないが、そのコンポーネントのクラスのオブジェクトをインスタンス化します。 (これは内部的にColdFusionサーバーによって参照されるの)もしcfinvokeの1つは、ColdFusionで、テンプレートとしてのコードに示すように3つのコンポーネントの機能の呼び出しに使用すると、ColdFusion Serverでは、との望みを与えるため、そのコンポーネントの3つの別のインスタンスを作成するのは、非常に効率がよくありません。


   
   
   
   
   
   
   
 
  

1つのテンプレートから複数回コンポーネントの関数をコールする正しい方法を個別の正式名称としてオブジェクトをインスタンス化するための関数を呼び出して1つのインスタンスとして、それらが必要です。コードのアクションでは、この原理を示します。注意してcfinvokeタグを参照するコンポーネントのインスタンスではなく、コンポーネント自体のコンポーネントの属性です。


   

   
   
   
   
   
   
 

そのように現在のページ要求としての持続持続会社コンポーネントの単一のインスタンスを作成して、単に何度としては、1つのインスタンスの関数を呼び出す必要があります。後に現在のページ要求を終了すると、ColdFusionが自動的にユーザーが作成したインスタンスを破棄します。 (次の部分では、どのようにあなたのコンポーネントのインスタンスは長く生きることを学ぶ。)cfobjectタグを使用してオブジェクトをインスタンス化する唯一の方法ではありません。は、CreateObject()関数と同様のオブジェクトを返します。コードの次の3行は、たとえば、同じ結果を生成:

 MyCompanyは= createObjectを("コンポーネント"、"当社"); 

同様に、使用してcfinvokeのコンポーネントの関数を呼び出すための唯一の方法はありません。後には、コンポーネントのインスタンスを作成し、簡単なドット表記を使用して、そのメソッドを呼び出すことができます。このコードは、例えば、企業はListCompaniesによって生成のリストを返すという名前の変数に関数listOfCompanies。

 MyCompanyは= createObjectを("コンポーネント"、"当社"); = myCompany.ListCompanies listOfCompanies(''); 

としての構文は非常に方法は、JavaとC + +のオブジェクトをインスタンス化し、それらのメソッドの呼び出しに近いものです実際には、コードはおそらく人のオブジェクトに精通しているColdFusionの開発者指向言語でのコンポーネントの機能と作業の中で最も人気のある方法です。直接が、結果は基本的には価値がされ、フォームおよびURLを介してコンポーネントの機能にアクセスすることができます。代わりに、戻り値を定義する、あなたの関数が呼び出される関数を呼び出してから、をプッシュする必要がありますから直接関数の本体のように、コードで示すように表示可能なコンテンツを渡します。

 SELECT得意先コード、得意先名、住所、市、州、郵便番号、コメントから会社のORDER BY得意先名 

#得意先#:
#コメント#

コーディングのこのような嫌なもの、人々です。それをしないでください。コンテンツの実際の消費電力機能を生産かどうかは、テンプレート、またはコンポーネント内にカプセル化されたローカルは、コンテンツを特定のデータ型の複雑な変数に含まれて返すから来て、その後、プレゼンテーションコードを使用してコンテンツをマージする。プレゼンテーションからロジックを分離する(そして、拡張子によるプレゼンテーションからのデータ)をモットーにしてください。場合は絶対に直接出力内容は、cffunctionタグからreturnType属性を削除して="はい出力を追加する関数を作成する必要があります"。決して両方の戻り値の型と同じ関数内で直接出力している。出力属性は、実際には、次の3つの状態:いる

出力="Yes"に関数全体を扱います場合には、cfoutputタグのペア内にされた。

出力="No"に関数全体を扱うかのようにCFSILENTタグのペア内にされた。

完全に関数内で呼び出し元に出力リークを明示的にcfoutputタグを有効にする出力属性を排除する。

これは、この学習の記事があります我々はされて約出力明示していない、まだ属性を、私たちは可能なので、できるだけ余分なコードとしては、特定のトピックに集中力集中することを排除したい。この記事は、前の部分では、どのようにコンポーネントの名前付きインスタンスを作成することを学ぶ場合、インスタンスのプロパティの基本については、コンポーネント、このスコープので見つける、あなたのクラスメソッドとインスタンスメソッドの違いを学ぶ。今すぐ行動に、これらの理論を配置する!場合は、コードで作成されたコンポーネントのインスタンスのみのページを要求するなどしてColdFusionサーバーを自動的に破棄長く保持されます。場合は、1つのページを要求する過去の永続的なコンポーネントで動作するようにしたい場合は、単純に永続的な範囲で、のようにコードに示すようにその生活をより長く1つの要求を作成する必要があります。

 Session.myCompany = createObjectを("コンポーネント"、"当社"); listOfCompanies = Session.myCompany.ListCompanies(''); 

今は、このインスタンスは、ユーザーのセッションが長く続く、これは、そのプロパティ、あまりにもこれが意味するのは、2番目のColdFusionを実行するのコーヒーカップを行く企業のコンポーネントのインスタンスを作成するテンプレートのColdFusionを実行できることを意味しないは、そのコンポーネントの他の関数を呼び出すテンプレートの3分の1のColdFusionを実行する、eBayの入札などまで、あなたがお客様のセッションタイムアウトを許可するよりも、インスタンスが破棄される一時停止へ、そのコンポーネントの関数を呼び出すテンプレート。だから我々は会社に長期的永続的なコンポーネントの住んでいた。コンポーネントは、することは、アプリケーションのスコープでも永続化することができますとして参照されます。だけでは、アプリケーションのすべてのユーザーにあなたのコンポーネントの同じインスタンスを使用するので、ロックを覚えても、より重要になり、パフォーマンスのボトルネックをあなたのコンポーネントは、このスコープのプロパティを操作する可能性のある問題の詳細となる。我々の予想では、今、あなたは'再思考、"私はこれはどこので、WDDXと組み合わせてそれをシリアライズしてクライアントをスコープに格納することによって自分のコンポーネントのインスタンスを永続化するつもりセッション変数を使用しないことを意味私のアプリケーションは、クラスタリングだ。"それは巧妙なのはアイデアが、残念ながら、それは動作しません。場合は、コンポーネントのインスタンスをシリアル化は、このスコープのプロパティだけで罰金をシリアル化するが、すべての機能を失うので、逆シリアル化は、すべてバックアップを取得するプロパティです。

記事は、ピーターアンドリュース提出


免責事項:弊社のウェブサイトは、この資料の内容については責任を負いません。 Webarticles無料の情報リソースです。
重要: この記事は、"コンポーネントの機能"自動ソフトウェアによって翻訳された起動3.6.2。大変申し訳ございませんが発生した可能性があります任意のスペルミスを感じている。お客様のご理解いただき、ありがとうございます。


Online: 268 users browsing the articles directory