Как создать глобальную функцию на странице Flashfusion Flash Form - PullRequest
0 голосов
/ 05 июня 2011

Как создать глобальную функцию, которую я могу вызывать из своего кода ActionScript на странице Flashfusion Coldfusion. В настоящее время все функциональные возможности ActionScript на странице связаны с событием, например, как мне создать метод GetCustomDate, к которому могут обращаться оба cfsavecontents ниже. В настоящее время я должен сделать все, что требуется для GetCustomDate, в каждом определении cfsavecontent.

Например:

<cfsavecontent variable="OnCustomDateClick">
   var customdate = GetCustomDate();
   //do other stuff
</cfsavecontent>
<cfsavecontent variable="OnNewDateClick">
   var newdate = GetCustomDate();
   //do other stuff
</cfsavecontent>

<cfinput onClick="#OnCustomDateClick#" type="text" name="customDate">
<cfinput onClick="#OnNewDateClick#" type="text" name="newDate">

Код может быть не на 100% точным, но вы можете понять, чего я пытаюсь достичь. Я действительно надеюсь, что есть способ сделать это.

--- ОБНОВЛЕНИЕ ------------------------------------------- ------------------------------------

Хорошо, поэтому, основываясь на комментариях, мы почти на месте, за исключением одного: Пожалуйста, извините, что код немного сложнее, чем простой пример GetCustomDate, который я привел ранее. Это было сделано просто для иллюстрации проблемы.

Учитывая код ниже. Когда я пытаюсь вызвать GetCurrency так:

_global.GetCurrency('40346feb-feb9-11d8-995f-00c0df070000');
alert('Symbol After: ' + _global.GetMyResult());

Вывод:

Symbol Before: $
Symbol After: Undefined

Как видно из предупреждения, значение currencySymbol ($) устанавливается и доступно из метода GetCurrency, но как только он выходит из этого метода, его значение становится «неопределенным».

Я не уверен, почему это происходит. Я также пытался вернуть переменную currencySymbol (это закомментировано) из метода GetCurrency, но flash / actionscript, похоже, не нравится возвращение значений из события OnResult.

Как мне вызвать эту функцию GetCurrency, чтобы после ее завершения у меня был какой-то доступ к результату?

<cfsavecontent variable="onLoad">
        <!--- Init --->
        _global.myResult;

        //create connection    
        var connection:mx.remoting.Connection = mx.remoting.NetServices.createGatewayConnection("http://<cfoutput>#cgi.HTTP_HOST#</cfoutput>/flashservices/gateway/");

        //declare service    
        var myService:mx.remoting.NetServiceProxy;
        var serviceName:String = '';

        var responseHandler = {};
        responseHandler.onStatus = function( stat: Object ):Void 
        {
           //if there is any error, show an alert 
           alert("Error while calling cfc:" + stat.description);
        }

        <!--- MyResult Get/Set --->
        _global.SetMyResult = function(result) 
        {
            _global.myResult = result;
            alert('_global.myResult' + _global.myResult)
        }       
        _global.GetMyResult = function() 
        {
            return _global.myResult;
        }

        <!--- Get Service Name --->
        _global.GetServiceName = function(serviceName) 
        {   
            var tServiceName:String = '';
            var tWebRoot:String = '<cfoutput>#Replace(Mid(request.site.webroot,2,Len(request.site.webroot)-1),'/','.','ALL')#</cfoutput>';

            <cfif request.site.webroot NEQ "">
                tServiceName = tWebRoot + '.' + + serviceName;
            </cfif>
            <!--- SALT --->
            tServiceName = 'pricelist.webroot.' + serviceName;

            return tServiceName;
        }       

        <!--- Get Currency --->
        _global.GetCurrency = function(currencyId)
        { 
            responseHandler.onResult = function( results: Object ):Void
            {
                var currencySymbol:String = '';

                if (results.length == 0) 
                {
                    alert('No details found!');
                } 
                else
                {
                    currencySymbol = results.getItemAt(0).currencySymbol;
                    _global.SetMyResult(currencySymbol);
                    alert('Symbol Before: ' + _global.GetMyResult());
                }
                //return currencySymbol;
            }           

            serviceName = _global.GetServiceName('components.currency');
            myService = connection.getService(serviceName, responseHandler );
            myService.getDetail(currencyId);
        }

        _global.GetCurrency('40346feb-feb9-11d8-995f-00c0df070000');
        alert('Symbol After: ' + _global.GetMyResult());
    </cfsavecontent>

Спасибо

Ответы [ 2 ]

1 голос
/ 09 июня 2011

Почему бы не поместить вашу GetCustomDate() actionScript функцию в <cfformitem type="script"> перед вашим cfsavecontents?

<cfformitem type="script">
function GetCustomDate():Date{
   // do stuff
}
</cfformitem>
1 голос
/ 08 июня 2011

Я совсем не знаком с ActionScript, но после определения вашей функции вы можете назначить ее для другой области:

<cffunction name="GetCustomDate">
    <!--- do stuff --->
</cffunction>
<cfset request.GetCustomDate = GetCustomDate>

Так что после этого ваш код изменится следующим образом:

<cfsavecontent variable="OnCustomDateClick">
   var customdate = request.GetCustomDate();
   //do other stuff
</cfsavecontent>
<cfsavecontent variable="OnNewDateClick">
   var newdate = request.GetCustomDate();
   //do other stuff
</cfsavecontent>

Извините, если я не ответил на ваш вопрос должным образом - как я уже сказал, я не знаком с ActionScript.

Хорошо, согласно вашему комментарию, который не будет работать.Попробуйте определить свою функцию следующим образом:

_global.GetCustomDate = function() { /* do stuff here */ }

И вызвать ее так:

<cfsavecontent variable="OnCustomDateClick">
   var customdate = _global.GetCustomDate();
   //do other stuff
</cfsavecontent>
<cfsavecontent variable="OnNewDateClick">
   var newdate = _global.GetCustomDate();
   //do other stuff
</cfsavecontent>
...