2010-03-05 102 views
0

在主类和视图类之间传递数据的最佳做法是什么?反之亦然?actionscript 3 MVC工作流程

main.as
var model : Model = new Model();
var view : View = new View();
var controller : controller = new Controller();

public function callFromView() : void {}

view.as

// how to reference the main.as
private function callToMain() : void
{
// please help
}

+0

你想在主视图之间传递什么(反之亦然)? – Allan 2010-03-06 01:33:42

+0

这是场景:: Main.as是swf的文档根目录,并且正在被另一个swf(加载程序)加载。当View完成它的工作时。该视图需要告诉Main.as将一个Event.COMPLETE激发给父SWF(加载器)。另外,视图需要引用Main.as来引用时间线中的一些显示对象。 – user229738 2010-03-08 15:46:02

回答

0

创建您的视图类中的变量,名为:

var main:Main; 

那么功能接收类型主要的对象,设置您在上面创建的变量,如下所示:

public function setMain(mainIN:Main):void 
{ 
    main = mainIN; 
} 

现在,您已在View类中的主文档类中包含所有数据的本地副本。你可以这样做(您的视图类中访问的主要性能功能):

main.model.x = mouseX; //just an example. For this, your model variable inside Main would need to be public. 

进行数据传递的其他方式,您只需创建你的视图类中的公共属性或功能,然后因为你”已经创建视图的实例内主类,它将能够与代码访问它作为正常的像:

view.someViewFunction(); 

这样,每个类可以访问对方的属性和功能。我希望这有帮助!

+0

我会避免这一点。视图不应该知道主要,因为它现在紧密耦合。如果主要变化的结构,那么视图也必须更新。至少如果视图需要做某件事,然后派发一个事件并且主要监听它:) – Allan 2010-03-06 01:37:53

+0

这里是场景:: Main.as是swf的文档根目录,并且正在被另一个swf(加载程序)加载。当View完成它的工作时。该视图需要告诉Main.as将一个Event.COMPLETE激发给父SWF(加载器)。另外,视图需要引用Main.as来引用时间线中的一些显示对象。 – user229738 2010-03-12 14:46:58

+0

让您的View类与已加载包含Main和View的对象进行通信非常棘手;我相信这是可能的,但我从来没有这样做过。不过,该加载器对象会在新SWF中完成加载时触发Event.COMPLETE对象。 至于让View可以访问Main的对象,我上面提出的方法可能并不像Allan所说的那样,但实际上它的工作原理非常好,而且我没有注意到任何内存问题。做到这一点,然后你可以用main.someObject.x = someX来访问Main的对象。 – debu 2010-03-12 17:26:37

1

我通常通过控制器更改模型中的属性来处理通信。在模型中改变数值时,我会派遣代表这些改变的事件。任何具有对模型的引用的主(在本例中为主)都可以订阅这些事件。这导致更加迂回的实现,但是导致了非常松散的结果。