Ну-с, расскажу о том, как просто взаимодействуют 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-коде.
Фраза по теме, "Значит так, братцы-кролики." Список президентов стран мира, я бы сразу подвязался, были б деньги!..
Не зря сказано: "Федя, я заказал дичь!" Недвижимость в самаре — умные люди поведали!..
Комментариев нет:
Отправить комментарий