пятница, 31 июля 2009 г.

CF9 и работа с Flash

Ну-с, расскажу о том, как просто взаимодействуют Flash и ColdFusion. На простом примере. Итак, создайте какую-нибудь папку – к примеру, hello, теперь — простую cf-страницу, назовём её helloworld.cfm, и вставьте следующий код:



<cfset tempStruct = structnew()>
<cfset tempStruct.timeVar = dateformat(now())>
<cfset tempStruct.helloMessage = "Привет, мир!">
<cfset Flash.Result = tempStruct>


Обратите внимание на последнюю строку кода — она очень важна!


Теперь, пишем AS3-код:




   1: import mx.remoting.*;

   2: import mx.services.Log;

   3: import mx.rpc.*;

   4: // Коннектимся

   5: var howdyService:Service = new Service(

   6: "http://localhost/flashservices/gateway",

   7: null,

   8: "hello", //наша папка, где мы сохранили наш helloworld.cfm

   9: null,

  10: null );

  11: // Вызываем helloWorld()

  12: var pc:PendingCall = howdyService.helloWorld();

  13: // Сообщаем сервисы какие методы будут отвечать за благополучный и неудачный результат

  14: pc.responder = new RelayResponder( this, "helloWorld_Result", "helloWorld_Fault" );

  15: function helloWorld_Result(re:ResultEvent)

  16: {

  17: // Показываем благополучный результат

  18: messageDisplay.text = re.result.HELLOMESSAGE;

  19: timeDisplay.text = re.result.TIMEVAR;

  20: }

  21: function helloWorld_Fault(fe:FaultEvent)

  22: {

  23: // Показывает неудачу

  24: messageDisplay.text = fe.fault;

  25: }



Примечание: запомните, что к сожалению автоматической конвертации булевых значений между Flash и ColdFusion не происходит, поэтому заменяйте true и false на 1 и 0 соответственно.


Теперь ещё раз обращу ваше внимание на последнюю строку в cf-сранице – именно благодаря ей, а точнее Flash.Result ваше flash-приложение получит данные.


Кроме того, если вы работаете с данными – к примеру, вам надо сделать выборку из БД, содержащую большое количество строк, вы можете воспользоваться параметром Flash.Pagesize – это очень полезная штука. Вот смотрите. Создайте cf-страницу – назовите её getdata.cfm — и сохраните её в той же папке hello:



<cfparam name="pagesize" default="10">
<cfif IsDefined("Flash.Params")>
<cfset pagesize = Flash.Params[1]>
</cfif>
<cfquery name="myQuery" datasource="cfdocexamples">
SELECT * FROM tblParks
</cfquery>
<cfset Flash.Pagesize = pagesize>
<cfset Flash.Result = myQuery>


А теперь as3-код:



import mx.remoting.*;
import mx.services.Log;
import mx.rpc.*;
// коннектимся
var CFMService:Service = new Service(
"http://localhost/flashservices/gateway",
null,
"hello", //папка, куда мы сохранили getdata.cfm
null,
null );
// вызываем метод getdata()
var pc:PendingCall = CFMService.getdata(5); //пятёрка в скобках — количество строк для вывода
// сообщаем сервису методы удачи и неудачи
pc.responder = new RelayResponder( this, "getdata_Result", "getdata_Fault" );
function getdata_Result(re:ResultEvent)
{
// показываем удачный результат
DataGlue.bindFormatStrings(employeeData, re.result, "#PARKNAME#, #CITY#, #STATE#");
}
function getdata_Fault(fe:FaultEvent)
{
// показываем неудачу
trace("Ошибочка: " + fe.fault.description);
}


Вызов cf-компонентов и java-кода абсолютно аналогичен.


Теперь займёмся отловом ошибок. Это тоже очень просто делается – в своих cf-файлах вы описываете функцию или код, который будет вызываться при ошибке, и просто возвращаете его через, к примеру, #cfcatch.message#, и просто вызываете этот метод как я показал выше в своём as3-коде.




Фраза по теме, "Значит так, братцы-кролики." Список президентов стран мира, я бы сразу подвязался, были б деньги!..

Не зря сказано: "Федя, я заказал дичь!" Недвижимость в самаре — умные люди поведали!..

Комментариев нет:

Отправить комментарий