Flex:如何使用来自不同类的flashvars

时间:2009-10-09 13:55:59

标签: flex actionscript-3

我只是在学习动作脚本,所以遇到问题

在我的应用程序中,我经常调用不同的Web服务,因为我不想在我的代码中对它们进行硬编码,我将URL作为flashvars传递给服务。

目前我这样做:

        public var siteUrl:String;
        public var gameId:String;

            public function main():void
            {
                siteUrl = Application.application.parameters.siteurl;
                gameId = Application.application.parameters.gameid;

main是一个函数,在应用程序的创建完成事件中调用。

这样我可以从应用程序的主文件中调用这两个变量,但我想从其他文件中访问它们。 (其他作为课程)

那么有没有办法用flashvars创建带有常量和init值的类,这样我就可以在任何地方使用它们(当然在导入之后)

1 个答案:

答案 0 :(得分:1)

参数只存储在Application.application.parameters对象中,而且是静态的。您没有理由无法从代码中的其他类访问它。

如果你想编写一个包装参数的类(可能验证它们或某些东西),你可以很容易地做到这一点。您可以使用a for each循环遍历所有参数。类似的东西:

var params:Object = Application.application.parameters
for(var name:String in params) {
  var value:String = params[name] as String;
  /* do something with the param */
}

如果您希望您的类实际验证事物,那么它可以检查它所期望的每个参数并将其存储在局部变量中。

这实际上取决于你自己的喜好。有些人可以在需要时访问参数对象。有些人喜欢通过配置实际定义所有预期配置变量的配置类来完成额外的代码。

更新以回应评论:

不是让一个模块声明变量并且让其他模块必须依赖于那个模块来访问属性,那么拥有一个配置模块就可以更加清晰,只需要它的所有东西都可以使用。

你可以使用静态类或单例或一些IoC的东西。为简单起见,我将向您展示一种静态类可以做到的方法。

class MyConfig {
  private static var _infoService:String;
  private static var _someOtherParam:int;

  public static function get infoService():String { return _infoService; }
  public static function get someOtherParam():int { return _someOtherParam; }

  public static function initParams():Void {
    var params:Object = Application.application.parameters;

    _infoService = params.infoservice;

    // just assuming you have a method to convert here.  don't remember the
    // code off the top of my head
    _someOtherParam = convertToInt(params.someOtherParam);
  }
}

确保您的应用初始化时调用MyConfig.initParams()。您可以让该方法实际验证它是否获得了预期的所有内容并在出现故障时抛出异常(或返回错误)。

然后,只要您需要在代码中使用该配置,您只需导入配置类并访问该参数。所以获取infoService就是:

var infoService:String = MyConfig.infoService;

我个人不会使用静态类,但它最容易显示。