将代理传递给PureMVC MultiCore应用程序中的已加载模块?

时间:2011-10-24 09:38:28

标签: actionscript-3 puremvc

我正在创建一个Flash广告系列,它将加载到客户端的框架中,我无法控制。该框架已经加载了一些东西,如语言环境,字体和副本,并会在初始化时将这些内容传递给我的swf。

由于我的swf(让我们称之为shell)的大小受到限制,它将依次显示特定于广告系列的预加载器,然后加载另一个swf(让我们称之为广告系列)与网站的其余部分。

shell和广告系列都是PureMVC模块。在加载到广告系列之前,shell将创建一些代理并使用从框架传递的数据(区域设置常量,字体等)填充这些代理。

当广告系列加载时,它也需要区域设置和字体等。所以我的问题是,将这些数据从shell模块传递到广告系列模块的最佳方法是什么?

  • 我可以在广告系列模块中创建相同的代理并再次加载数据,这些数据将被缓存,但这显然是错误的方法。

  • 我已经调查了管道实用程序的使用,但这在我的案例中似乎有些过分,因为通信将是单向的,并且只会在广告系列初始化期间发生一次。

  • 从设计模式的角度来看,将代理传递给广告系列模块的init方法然后在广告系列模块启动命令中注册这些代理是否“正常”?这似乎是错误的,因为这些代理通过通知名称引用了我的shell应用程序外观。如果我将通知名称移动到两个模块都可以使用的“NotificationConstants”类,会不会没用?

  • 我可以在广告系列模块中创建类似的代理,但这次使用传递给前面提到的init方法的旧代理中的数据对象填充它们吗?自发地感觉这是最好的方法,因为数据对象没有任何对我的shell模块的引用,但“旧”代理做了..

1 个答案:

答案 0 :(得分:2)

我通常使用的解决方案是创建一个界面:

interface Campaign {
    function set campaignDetails(value:CampaignDetails):void;

    //...
}

广告系列模块应该实现此接口 - 在实现中,我建议您在模块中使用不同的代理,这样可以避免重复的通知和引用。

当shell准备好加载模块时,它只需要:

if (module is Campaign)
{
    (module as Campaign).campaignDetails = ...;
}

我确定我告诉你什么新鲜事。您只需要确保仅在接口级别上保持shell和模块之间的熟人。然后你只需传递数据并离开模块MVC核心,独立于shell处理它。