2011-02-05 4 views
1

Я использую несколько модулей повторно в приложении Flex и изменяя условия, передавая в параметрах через 'loaderInfo.url' var. Это отлично работает для первой итерации данного модуля, но последующие попытки всегда будут видеть те же параметры, что и первое создание независимо от того, что на самом деле используется.Передача параметра в модуль flex через url

Есть ли способ сбросить это значение при создании модуля?

private var moduleInfo : IModuleInfo; 
private function loadPageModule(pathString : String, pageParam : String) : void 
{ 
    pathString = "modules/" + pathString + ".swf?param=" + pageParam; 

    moduleInfo = ModuleManager.getModule(pathString); 
    moduleInfo.addEventListener(ModuleEvent.READY, onPageModuleReady, false, 0, true); 
    moduleInfo.load(ApplicationDomain.currentDomain, null, null); 
} 

Когда я осматриваю параметров в обработчике «CreationComplete» (например, «след (this.loaderInfo.url);») свои же каждый раз (для данного модуля) независимо от того, что на самом деле прошло в через строку? param =. Что я делаю не так?

+0

Я испытываю эту проблему, когда мы говорим. Я загружаю модуль несколько раз в приложение и передавая данные по строке запроса. Он работает в первый раз, когда загружается модуль, но данные одинаковы каждый раз после. – goalie7960

+0

Так вы загружаете идентичный модуль несколько раз, но каждый раз отправляете разные URL-адреса? (желая понять вашу проблему) – ethrbunny

+0

Это правильно. Параметры URL дают некоторую информацию о том, как должен действовать модуль. Я попытался явно вызвать removeEventListener (ModuleEvent.Ready, ...), но это не помогло. Я действительно нашел обходной путь, установив некоторые данные на общую модель. Это не идеально, но он решает мою проблему. – goalie7960

ответ

0

Ну, я не знаю, почему это делает то, что делает ... но .. эффективным способом передачи уникальных параметров в разные экземпляры модуля является использование параметра IModuleInfo.data. Метод URL никогда не работал должным образом (для меня).

1

Я немного смущен вашим кодом. «moduleInfo» - это локальная переменная в loadPageModule, то есть после выполнения функции она должна быть собрана в мусор. Обычно добавление слушателя событий останавливает объект от GC'ed, но вы специально устанавливаете для аргумента "weakListener" addEventListener значение true.

Можете ли вы установить аргумент weakListener для addEventListener на false и вручную удалить слушателя в onPageModuleReady? Как показано ниже:

// change true to false on this line 
moduleInfo.addEventListener(ModuleEvent.READY, onPageModuleReady, false, 0, false); 

// tweak onPageModuleReady 
private function onPageModuleReady(e:Event):void { 
e.target.removeEventListener(ModuleEvent.READY, onPageModuleReady); 
// that will allow the object to be GC'ed 
...rest of your code 

Протестируйте его снова с этой конфигурацией и отчитайте, если что-то изменится.

+0

Я вытащил несколько строк, где я хранили 'moduleInfo' для последующего использования. Это выглядело как слишком много беспорядка для этого примера. Хотя теперь, когда вы указываете на это, образец является хромым ++. – ethrbunny

+0

Вы всегда можете обновить пример кода;) – Shakakai

+0

Так что я могу! И сделано! – ethrbunny

Смежные вопросы