Flex: как использовать flashvars из разных классов - PullRequest
0 голосов
/ 09 октября 2009

Я только учусь на ActionScript, поэтому сталкиваюсь с проблемой

В моем приложении я часто обращаюсь к различным веб-службам, и поскольку я не хочу жестко кодировать URL-адреса в своем коде, я передаю 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, чтобы я мог использовать их везде (после импорта, конечно)

1 Ответ

1 голос
/ 09 октября 2009

Параметры просто хранятся в этом объекте Application.application.parameters, и это статично. Нет причины, по которой вы не могли бы получить к ней доступ из других классов в вашем коде.

Если вы хотите написать класс, который упаковывает параметры (может быть, проверяет их или что-то еще), вы можете сделать это довольно легко. Вы можете использовать для каждого цикла, чтобы перебрать все параметры. Что-то вроде:

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;

Лично я бы не использовал статический класс, но это было проще всего показать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...