今日任务:
在HTML元素中,实现鼠标的over、out事件非常简单,将onmouseover、onmouseout关联至相应的JavaScript函数即可。同样的,在Atlas框架模型里,需要实现同样的功能,又该如何设计呢?
根据Atlas Doc的介绍,可以有两种实现方式:1、XML Script定义;2、JavaScript。
解决问题:
我们首先来看看Atlas 中的Sys.UI.Control在XML Script定义方式下的格式:
<control>
<behaviors>
<!-- behaviors -->
</behaviors>
<bindings>
<!-- bindings -->
</bindings>
<propertyChanged>
<!-- actions -->
</propertyChanged>
</control>
<hoverBehavior>
<bindings>
<!-- bindings -->
</bindings>
<hover>
<!-- actions -->
</hover>
<propertyChanged>
<!-- actions -->
</propertyChanged>
<unhover>
<!-- actions -->
</unhover>
</clickBehavior>
function CreatePopupMessage(sender , popupElement)

{
// 创建Atlas Sys.UI.Control 类实例
// 此Atlas控件绑定至HTML 元素popupElement
var c = new Sys.UI.Control(popupElement);
// 初始化Atlas控件
c.initialize();
// 创建Sys.UI.PopupBehavior实例
// PopupBehavior类型继承自Sys.UI.Behavior
// PopupBehavior控件实现类似于ToolTip(ASP.net服务器控件属性)或tilte(HTML 元素特性)的加强版功能
var popupBehavior = new Sys.UI.PopupBehavior();
// 设置Popup动作的所有者,类似于ToolTip或title的提示方框
// 在这里我们可以对这个“提示方框”进行很好的外观控制
popupBehavior.setOwner(c);
// 设置Popup动作发生的父对象
popupBehavior.set_parentElement(sender);
// 设置Popup动作发生时类似于ToolTip或tilte的提示框显示的位置
popupBehavior.set_positioningMode(Sys.UI.PositioningMode.Absolute );
popupBehavior.set_y(20);
// 初始化popupBehavior控件
popupBehavior.initialize();
// 那么,上面的popup又将如何被激活呢?
// 这就需要应用到调用方法动作类:InvokeMethodAction
// InvokeMethodAction需要指定目标动作对象和目标动作中的具体方法
// InvokeMethodAction类似于C#中的委托、事件???
// 创建InvokeMethodAction实例
var newAction = new Sys.InvokeMethodAction();
// 设置InvokeMethodAction的目标为上面创建的popupBehavior
newAction.set_target(popupBehavior);
// 设置调用的方法,popupBehavior.show();
newAction.set_method("show");
// 初始化控件
newAction.initialize();
// 另一个方法调用Action
var uAction = new Sys.InvokeMethodAction();
uAction.initialize();
uAction.set_target(popupBehavior);
uAction.set_method("hide");
// 最后,上述过程又是如何被实现调用的呢?
// 我们还是以鼠标进入目标控件为例来说明
// 首先实例一HoverBehavior类
var hBehavior = new Sys.UI.HoverBehavior();
// 设置HoverBehavior动作的检测对象
var timeControl = new Sys.UI.Control(sender);
timeControl.initialize();
// 设置HoverBehavior动作的所有者
hBehavior.setOwner(timeControl);
hBehavior.initialize();
// 最后将Action添加至Hover的相关事件
hBehavior.hover.addAction(newAction);
hBehavior.unhover.addAction(uAction);
}