关联View与Controller
View与Controller关联后,Controller就能监听到View触发的ViewEvent事件。一个Controller对象可以关联多个View对象,但是一个View对象只能关联一个Controller对象
View包含一个名称为”controller”的setter方法,只要把Controller对象作为属性值设置给此属性,那么View与Controller即关联在一起。View一旦与某个Controller对象关联在一起,就不能再与另外的Controller对象相关联,所以一般我们会在Controller的初始化方法创建View对象并与当前Controller对象关联,如下:
代码
public class HelloController extends Controller
{
private var _view:HelloView;
public function HelloController()
{
super();
}
/**此方法由构造函数调用,可以在此方法里创建并初始化View*/
override protected function initController():void{
_view=new HelloView();//創建_view對象
_view.controller=this;//指定_view對象的控制器為當前的Controller
}
}
View与Controller关联后,当View触发ViewEvent事件时,会调用Controller的handleViewEvent()把触发时创建的ViewEvent事件对象交给Controller处理。所以自定义控制器类可以覆盖handleViewEvent()处理ViewEvent事件。但是不推荐这样做,而是推荐使用Controller的默认实现。
Controller的handleViewEvent()默认实现约定如下:
如果传入的ViewEvent对象的name属性值以“#”开头,那么会调用与其对应的Controller的public方法,并且把ViewEvent对象的body属性值作为方法参数值
如果传入的ViewEvent对象的name属性值以“$”开头,那么会设置与其对应的Controller的public属性(包括getter/setter),并且把ViewEvent对象的body属性值作为此属性值
以下代码演示了点击View里的按钮后,通过触发ViewEvent事件去调用Controller的方法或设置Controller的属性的方式,如下:
View代码
<?xml version="1.0" encoding="utf-8"?>
<sdp:View xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="100%" height="100%" xmlns:sdp="http://www.chinasie.com/sdp">
<mx:Script>
<![CDATA[
import com.sdp.data.DynamicObject;
/***********以下为业务方法***********/
[Bindable]
public var vo:DynamicObject;
]]>
</mx:Script>
<mx:Button x="178" y="50" label="submit" click="dispatch(this,'#handleViewSubmit',[vo])"/>
<mx:Button x="10" y="158" label="设置Controller的name属性值" click="dispatch(this,'$name',Math.random())"/>
<mx:Button x="10" y="188" label="调用Controller的sayHello()方法" click="dispatch(this,'#sayHello')"/>
</sdp:View>
Controller代码
/**此方法由构造函数调用,可以在此方法里创建并初始化View*/
override protected function initController():void{
//创建并初始化MasterView
_masterView=new MasterView();
//把MasterController设置给MasterView,这样MasterController就能监听到
//MasterView触发的ViewEvent事件
_masterView.controller=this;
}
public var name:String; //name的值会变为 Math.random()产生的值
public function sayHello():void{
Alert.show("Hello,"+name); }//调用方法
/**处理MasterView提交事件*/
public function handleViewSubmit(vo:DynamicObject):void{
Alert.show(vo+"");
}
//view页面点击了submit按钮后,产生一个ViewEvent,由于在controller初始化的时候已经把Controller给了View,所以它就能监听到产生的ViewEvent(这里是HandlerViewSubmit)
如前所述,在View显示/移除前/后会分别触发4个ViewEvent事件,Controller默认实现了监听此事件的4个方法,子类可以覆盖这些方法添加代码,如下:
代码
/**处理View显示前事件*/
override public function beforeViewShow(view:IView,container:DisplayObjectContainer,
event:IViewEvent):void{
//以下代码可以取消显示View
//event.preventDefault();
}
/**处理View显示后事件*/
override public function afterViewShow(view:IView,container:DisplayObjectContainer):void{}
/**处理View移除前事件*/
override public function beforeViewRemove(view:IView,container:DisplayObjectContainer,
event:IViewEvent):void{
//以下代码可以取消移除View
//event.preventDefault();
}
/**处理View移除后事件*/
override public function afterViewRemove(view:IView,container:DisplayObjectContainer):void{}
分享到:
相关推荐
Unity用UGUI制作多级列表树形UI菜单,一款功能强大的插件,易学好用,Unity2017.4亲测可用!!
#### 一、MVC模式的概念与优势 **模型-视图-控制器**(Model-View-Controller,简称MVC)是一种广泛应用于软件工程中的设计模式,特别是面向对象编程语言如C#中,用于构建可扩展、易于维护的应用程序。其核心思想是...
多种语言C#,VB,html对PDF的显示,有样例。
本实例“MFC-List-view-control.rar”着重于利用MFC实现一个具有登录界面的程序,其中用户名以图标的形式展示在列表控制(List Control)中。下面我们将深入探讨MFC、登录界面设计以及如何在List Control中添加图标...
"OC Control 水印(View)"项目就是针对这一需求提供的一种解决方案。这个项目使用Objective-C语言编写,主要封装了一个工具类,用于方便地在App的UI上动态添加和管理屏幕水印。 首先,我们来看一下"水印(View)"这个...
【标签】"android-segmented-control-view.zip" 的标签与压缩包的标题一致,进一步确认了这个资源主要关于Android平台上的分段控制器视图开发。 【压缩包子文件的文件名称列表】: 1. **JavaApk源码说明.txt**:这...
1. **设计界面**:打开你的Interface Builder文件,选择你想要放置PathControl的View Controller。从Object Library中找到“Path Control”并将其拖放到视图上。调整其大小和位置以适应你的界面需求。 2. **配置...
List Control有多种视图模式,包括报告视图(Report View)、图标视图(Icon View)、小图标视图(Small Icon View)和详细信息视图(Details View),每种视图都有其特定的用途。 二、List Control的创建与添加 1...
本篇将详细介绍三个常用的控件:树形控件(Tree View Control)、列表控件(List Control)以及列表框控件(ListBox Control),并提供具体的实现案例。 首先,我们来看树形控件节点的图标效果。树形控件是一种层次...
2. **视图(View)**:视图是用户看到和与之交互的界面。它通常从模型获取数据,并显示给用户。视图可以有多个实例,以不同的方式展示同一份模型数据。 3. **控制器(Controller)**:控制器接收用户的输入并调用...
D1_1 - CONTROL-M Introduction & Basic Concept.ppt D1_2 - CONTROL-M Scheduling Concepts.ppt D2_1 - CONTROL-M Desktop Scheduling....D2_2 - EM online and Network view.ppt D2_3 - Implementation Exercises.ppt
DameWare Mini Remote Control 是一款高效的远程控制工具,它能够帮助用户轻松地实现对远程计算机的控制与管理。这款软件特别适合于需要频繁进行远程访问的工作场景,例如技术支持人员、系统管理员以及家庭用户等。...
List Control有两种主要的视图模式:报告视图(Report View)和图标视图(Icon View)。在报告视图中,列表项通常包含多个列,每列可以显示不同的数据,非常适合用来展示结构化的表格数据。而图标视图则以图标的形式...
This code can as many child nodes to a tree view control and can save the data and structure of the treeview control in a text file. Later the data and structure can be retrieved from the text file ...
4. **EM online and Network view.ppt**:EM(Enterprise Manager)是Control-M的中央管理工具,提供了网络视图来监控整个工作流的运行状态。这部分可能会讲解如何在线使用EM,如何查看和管理全局作业状态,以及如何...
在TreeControl中,每个节点可以有一个与之关联的复选框,用户可以通过点击这个复选框来改变节点的状态。 标题和描述所提到的“选中某个节点的复选框后,自动选中子节点的复选框”是一种常见的递归选择行为。这种...
在WAF项目中,这些UserControl可以通过依赖注入和数据绑定与模型(Model)和视图模型(ViewModel)进行交互。例如,你可以使用MVVM(Model-View-ViewModel)模式,将业务逻辑和数据绑定到ViewModel上,而View(包括...
7. **排序与筛选**:List Control不直接支持排序,但可以通过自定义函数遍历并重新插入项来实现。同样,筛选功能需要程序员自行实现。 8. **子项图标**:使用SetItemState()和LVIS_ICON标志可以设置项的图标,或者...