2010-04-24 57 views
2

這是一個有趣的架構查詢。我有一段代碼需要在服務器上(在Node.js下)和客戶端(在用Actionscript 3編寫的Flash 10應用程序中)運行。代碼大部分都是相當複雜的對象操作,它不會進行任何API調用,並且在上下文中都可以正常工作。在Actionscript3和Javascript中使用代碼

到目前爲止,該項目只是一個演示,所以我一直很高興將代碼複製並粘貼到這兩個地方。但推進這一點可能相當有趣。

那麼你會怎麼做呢?

  • 我假設有沒有簡單的方法來獲取Flash SDK(已建沒有IDE)閱讀和做一些名爲.js文件非常有用。

  • 我唯一的想法是我可以編寫一個代碼生成器,它接受.js文件並將其放入ActionScript包裝器中。

是否有任何明顯的方法我錯過了?


只是爲了搶先一個明顯的答案,我知道像HaXe這樣的跨平臺語言。

+0

Does #include check file extension? – drawnonward 2010-04-24 16:04:04

+0

@drawnonward不,它不。在AS 3.0中,該指令不帶散列符號,但是(與AS 1.0和2.0相反)。 – 2010-04-24 16:27:29

回答

3

一種可能的方式是使用包括在包裝ActionScript代碼幫助。只是一個快速和非常簡單的測試:

package { 
    import flash.display.Sprite; 
    import flash.text.TextField; 

    public class Main extends Sprite { 


     private var _alertTxt:TextField; 

     include "some.js" 

     public function Main() { 
      _alertTxt = new TextField(); 
      _alertTxt.multiline = true; 
      _alertTxt.height = 400; 
      _alertTxt.width = 400; 
      addChild(_alertTxt); 
      run(); 
     } 

     public function alert(msg) { 
      _alertTxt.text += msg + "\n"; 
     } 
    } 
} 

some.js

function run() { 
    alert("run"); 
    var obj = { 
     a : 'hello', 
     b : 4.5, 
     c : false 
    }; 
    loop(obj); 
} 

function loop(obj) { 
    for (var field in obj) { 
     alert(obj[field]); 
    }  
} 

要通過命令行編譯(您可能要添加其他選項):

mxmlc -strict=false Main.as 

如果您不要嚴格設置爲false,由於缺少類型聲明,它不會編譯。

+1

Gadzooks,Juan。不知道,即使存在。 當我成爲一個「嚴肅」的開發語言時,我在第3版中加入了ActionScript。我想這是因爲我從來沒有發現關於包括。 完美的解決方案。謝謝。我很高興這很簡單。 – Ian 2010-04-24 20:11:44

+1

30秒後,它像一個魅力...只是一個FYI的情況下,其他人發生這種情況:我不想關閉我的大部分編譯嚴格。所以我將這個封裝好的組件編譯成一個SWC文件,以便以後連接到最終的編譯。這種鬆懈的檢查方式不允許我擺脫其他任何我不應該做的事情。 – Ian 2010-04-24 20:17:04

+1

很酷。是的,包含並不是一個祕密功能,但它並不是全部公開的,因爲它的使用通常被忽視。但我很高興他們沒有從AS 3.0中移除它,因爲它在某些情況下可能非常有用。 – 2010-04-24 20:38:18

0

爲什麼不是ExternalApi?

我有一段代碼,需要 運行服務器

什麼樣的代碼是它嗎? 如果js可以處理比ExternaAPI,fcommand或javascript:「alert('');」可以搞定......

how to inject javascript code in url to insert iframe in existing page可以用js的網址econding

+0

它是一個很好的建議,謝謝,但不幸的是它不會在我的用例中起作用(SWF並不總是在瀏覽器中運行)。 – Ian 2010-04-24 20:07:55