2011-06-05 24 views
0

如何創建一個全局函數,我可以從ColdFusion Flash Forms頁面中的actionscript代碼調用該函數。目前,頁面上的所有動作腳本功能都與一個事件相關聯,例如,如何創建一個GetCustomDate方法,該方法可以通過下面的兩個cfsavecontents訪問。目前,我必須在每個cfsavecontent定義中爲GetCustomDate執行所需的任何功能。如何在Coldfusion Flash Form上創建全局函數頁面

例如:

<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%準確的,但你可以得到什麼,我試圖完成的JIST。我真的希望有辦法做到這一點。

--- UPDATE ------------------------------------------ -------------------------------------

好的,所以根據目前的評論,除了一件事之外,我們差不多: 請原諒,代碼稍微複雜一點,就是我之前給出的簡單的GetCustomDate示例。說明問題很簡單。

給出下面的代碼。 當我嘗試並調用GetCurrency像這樣:

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

輸出是:

Symbol Before: $ 
Symbol After: Undefined 

你可以通過警報看到,CURRENCYSYMBOL值($)設置,並從GetCurrency中訪問方法,但是一旦它離開該方法,它的值就是'undefined'。

我不知道爲什麼會發生這種情況。我也嘗試從GetCurrency方法返回currencySymbol(這是註釋掉的)變量,但是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> 

感謝

回答

1

我不熟悉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> 

對不起,如果我沒有適當地解決你的問題 - 就像我sa編號,我不熟悉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> 
+0

謝謝,但不幸的是,這將無法正常工作。包含在cfsavecontents中的代碼是ActionScript,而不是cfscript。所以你不能像這樣調用函數。 – Cheeky 2011-06-08 18:10:41

+0

編輯提供另一種方法。 – 2011-06-08 18:29:28

+0

謝謝 - 這讓我朝着正確的方向發展。我已經在表單的OnLoad事件中實現了這一點,並且迄今爲止除了一件事情之外,一切正常。我已更新該帖子以反映此問題。你能提供任何建議嗎?謝謝 – Cheeky 2011-06-09 07:24:00

1

爲什麼不把你的GetCustomDate()動作功能在您cfsavecontents前<cfformitem type="script">

<cfformitem type="script"> 
function GetCustomDate():Date{ 
    // do stuff 
} 
</cfformitem> 
+0

@Fitzchev:謝謝 - 這種方法也適用。請參閱我的更新後的帖子,以獲取有關此問題的更多詳情。謝謝 – Cheeky 2011-06-09 07:37:25

+0

@Cheeky對於你的最後一個問題,我認爲由於調用是異步的,當你在遠程調用後進行RIGHT警告時,你的「全局」變量_global.myResult還沒有被設置。在「之前的符號」之前沒有顯示「符號之後」? – 2011-06-09 09:38:28

+0

@Fitzchev:是的,我很確定這是發生了什麼。它看起來首先顯示「Symbol After」,然後是「Symbol Before」,這很可能證實了這一點。問題是,如何解決它? – Cheeky 2011-06-09 12:40:33