我希望为多个事件提供单个事件监听器,具体取决于具体情况 我希望单独处理它们的事件类型。
类似于Swiz framework的内容,请参阅:“从单一方法处理多个事件”
我有一段像
这样的代码 var toolOptions:UIComponent=ToolOptions.createToolOptions(type);
if (options != null)
{
options.addEventListener(Event.SELECT,toolOptionSelectedHandler);
someViewComponent.addOptions(toolOptions);
}
// handle depending on event type
private function toolOptionSelectedHandler(event:*):void
{
//handle depending on type of event fired
// type cast event depending on type and retrieve VO from event
//and send handle it..
//SomeToolObj.handle(event.VO);
}
在上面 toolOptions 是一个mxml组件,它基于
动态创建
'类型'。
还应该从组件中调度哪种类型的事件?例如:Event.SELECT
更准确地说,工具栏基本上需要上述内容 当用户选择工具时,他会显示工具的选项,当他选择选项时, 工具应该将它们应用于视图上的对象。
还有更好的方法吗?
答案 0 :(得分:4)
这就是我的理解:
你有不同的工具。每个工具都有一个选项列表。单击一个选项,单个事件处理程序应根据选项执行某些操作。
object on the view 1 : n tools 1 : n options
使用属性OptionEvent.SELECT
创建自定义事件optionType
。
public class OptionEvent extends Event {
public static const SELECT : String = "optionEvent_select";
public var optionType : String;
public function OptionEvent(type : String) {
super(type, true); // bubbles
}
}
当用户选择该选项时,请按以下方式调度事件:
var event : OptionEvent = new OptionEvent(OptionEvent.SELECT);
event.optionType = "border";
dispatchEvent(event);
像你一样听取这个事件:
var toolOptions:UIComponent=ToolOptions.createToolOptions(type);
if (options != null) {
options.addEventListener(OptionEvent.SELECT,toolOptionSelectedHandler);
someViewComponent.addOptions(toolOptions);
}
通过确定选项类型来区分选项类型:
private function toolOptionSelectedHandler(event : OptionEvent) : void {
var optionType = event.optionType;
switch (optionType) {
case "border":
addBorderToView();
break;
case "rotation":
rotateView();
break;
}
}
更新 - 如何在OptionEvent中设置选项值列表:
public class OptionEvent extends Event {
public static const SELECT : String = "optionEvent_select";
public var optionType : String;
private var _optionValues : Object;
public function OptionEvent(type : String) {
_optionValues = new Object();
super(type, true); // bubbles
}
public function setOptionValue(property : String, value : *) : void {
_optionValues[property] = value;
}
public function getOptionValue(property : String) : * {
return _optionValues[property];
}
}
答案 1 :(得分:2)
您可能还想尝试这样的事情: http://blog.iconara.net/2008/03/30/separating-event-handling-from-event-filtering/
并且我已经做了一个解决方案我通过使用具有单独的DetermResponsibility和meetResponsibility方法的链接来使用责任链更加舒适,其中在创建链接时存储特定事件数据。如果我们发现它与传递到链中的事件之间存在匹配,那么我们称之为meetResponsibility。否则,我们称之为链中的下一个链接。
有关COR的更多信息,请查看http://www.as3dp.com/2008/01/14/actionscript-30-chain-of-responsibility-design-pattern-decoupling-request-and-request-handler/