Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 在PureMVC多核应用程序中将代理传递给加载的模块?_Actionscript 3_Puremvc - Fatal编程技术网

Actionscript 3 在PureMVC多核应用程序中将代理传递给加载的模块?

Actionscript 3 在PureMVC多核应用程序中将代理传递给加载的模块?,actionscript-3,puremvc,Actionscript 3,Puremvc,我正在创建一个flash活动,它将被加载到一个客户端的框架中,我无法控制它。框架已经加载了一些东西,比如区域设置、字体和副本,并将在初始化时将这些东西传递给我的swf 由于我的swf(我们称之为shell)的大小受到限制,它将依次显示一个特定于活动的预加载程序,然后在站点的其余部分加载另一个swf(我们称之为活动) shell和活动都将是PureMVC模块。在加载到活动中之前,shell将创建一些代理,并使用从框架传递的数据(区域设置常量、字体等)填充这些代理 当活动加载时,它也需要区域设置和字

我正在创建一个flash活动,它将被加载到一个客户端的框架中,我无法控制它。框架已经加载了一些东西,比如区域设置、字体和副本,并将在初始化时将这些东西传递给我的swf

由于我的swf(我们称之为shell)的大小受到限制,它将依次显示一个特定于活动的预加载程序,然后在站点的其余部分加载另一个swf(我们称之为活动)

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

当活动加载时,它也需要区域设置和字体等。所以我的问题是,从shell模块将此数据传递到活动模块的最佳方式是什么

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

  • 我已经调查了pipes实用程序的使用情况,但在我的案例中这似乎有点过分,因为通信是单向的,在活动初始化期间只发生一次

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

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


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

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

    //...
}
活动模块应实现此接口-在实现中,我建议您在模块中使用不同的代理,以避免重复通知和引用

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

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

我肯定我没告诉你什么新鲜事。您只需要确保shell和模块之间只在接口级别保持熟悉。然后,您只需传递数据,让模块MVC core独立于外壳处理数据。

谢谢,但是对同一类数据使用不同的代理似乎打破了“不要重复自己”的经典规则,因此我想我为这些代理创建了一个“共享”包,并将通知放入NotificationConstants类中。这样,shell和campaign模块都将只引用共享包。在这个包中,我还按照您的建议使用了一个ICampaign接口,并使用适当的方法传递代理。哦,刚刚找到了这个,请查看最后一段。我想代理不应该引用项目中的任何其他类是有道理的。