2010-04-24 21 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