我可以在自定义组件中禁用 CHANGE 事件吗?
Posted
技术标签:
【中文标题】我可以在自定义组件中禁用 CHANGE 事件吗?【英文标题】:Can I disable CHANGE event in a custom component? 【发布时间】:2012-11-26 12:11:27 【问题描述】:我有一个自定义 MXML 组件,它的更改事件声明为:
<mx:Metadata>
[Event(name="change", type="flash.events.Event")]
</mx:Metadata>
问题在于,每当我更改组件内的任何内容(包括简单的 var)时,都会调度此事件。有时我希望能够在不调度更改事件的情况下更改组件中 var 的值。有没有一种简单的方法可以禁用更改事件,然后在我做出我想要的更改后重新启用它?
我尝试使用 removeEventListener("change") 但似乎我只能对添加了事件侦听器的函数执行此操作。 removeEventListener(Event.CHANGE) 也一样。
当然必须有一种简单的方法来禁用声明的事件 mx:元数据
【问题讨论】:
【参考方案1】:是的,您可以使用一些有关事件的方法。因此,尽管该事件仍被分派,但您可以完全控制它所发生的事情。
// first set the useCapture flag to true
// this tell flex that onChange gets the event before it starts bubbling
myCustomComponentThatDispatchesALotOfChangeEvents.addEventListener(Event.CHANGE, onChange, true);
private function onChange(event:Event):void
// here is the method you want
// this stops the event from bubbling and lets you handle
// all functionality in this listener only
event.stopImmediatePropogation();
// now look at what happened and see if you want to
// do anything else based on what actually changed
作为旁注,您还可以查看 Event.preventDefault() ,它取消了事件的默认行为
“改变”也是一个弹性的东西。如果您只想在一个特定场景中分派事件,请创建一个新的事件类,将事件子类化为 MyChangeEvent。当你做出改变时......
dispatchEvent(new MyChangeEvent(MyChangeEvent.STUFF_CHANGED))
然后
myCustomComponentThatDispatchesALotOfChangeEvents.addEventListener(MyChangeEvent.STUFF_CHANGED, onChange);
【讨论】:
感谢杰森的回答。我会试一试,如果我有任何问题,我会回复你。看起来很有希望。以上是关于我可以在自定义组件中禁用 CHANGE 事件吗?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Swift 2.2 中的 ResearchKit 在自定义活动步骤中禁用下一个按钮?
在element-ui组件select选择器的change事件中传递自定义参数