Bất kỳ ai có thể cho tôi biết sự khác biệt giữa mục tiêu và mục tiêu hiện tại trong flex?Sự khác biệt giữa mục tiêu và mục tiêu hiện tại trong flex là gì?
Trả lời
Chắc chắn, tôi cũng gặp một số vấn đề với điều này. Thuộc tính currentTarget
là IEventListener bạn đã đăng ký trình xử lý sự kiện. Các target
là một trong đó gửi sự kiện mà bạn đang xử lý. Vì vậy, các thay đổi currentTarget
, các target
không.
Kiểm tra các ví dụ sau:
mẫu App
<?xml version="1.0" encoding="utf-8"?>
<mx:Application
xmlns:mx="http://www.adobe.com/2006/mxml"
creationComplete="addListeners()">
<mx:Script>
<![CDATA[
protected function addListeners():void
{
greatGrandParent.addEventListener(Event.COMPLETE, completeHandler);
grandParent.addEventListener(Event.COMPLETE, completeHandler);
aParent.addEventListener(Event.COMPLETE, completeHandler);
child.addEventListener(Event.COMPLETE, completeHandler);
// dispatch event that "bubbles", second param is "true"
// dispatched from child
child.dispatchEvent(new Event(Event.COMPLETE, true));
}
protected function completeHandler(event:Event):void
{
trace("target: ", event.target + ", currentTarget: ", event.currentTarget);
}
]]>
</mx:Script>
<mx:Panel id="greatGrandParent">
<mx:Panel id="grandParent">
<mx:Panel id="aParent">
<mx:Button id="child"/>
</mx:Panel>
</mx:Panel>
</mx:Panel>
</mx:Application>
Output
target: MyApp.greatGrandParent.grandParent.aParent.child, currentTarget: MyApp.greatGrandParent.grandParent.aParent.child
target: MyApp.greatGrandParent.grandParent.aParent.child, currentTarget: MyApp.greatGrandParent.grandParent.aParent
target: MyApp.greatGrandParent.grandParent.aParent.child, currentTarget: MyApp.greatGrandParent.grandParent
target: MyApp.greatGrandParent.grandParent.aParent.child, currentTarget: MyApp.greatGrandParent
Đó là một cây đơn giản của các đối tượng hiển thị, và khi ứng dụng đã sẵn sàng tôi :
- Thêm người nghe cho cùng một sự kiện trên mỗi thành phần trong cây.
- Gửi một sự kiện tùy ý (chỉ để trình diễn). Tôi đã chọn
Event.COMPLETE
.
Kể từ khi tất cả mọi thứ đã đăng ký eventHandler cho sự kiện đó giống nhau, và kể từ khi tôi đã thiết bubbles
true (new Event(type, bubbles)
), bất cứ điều gì trong cây, từ trẻ đến greatGrandParent và xa hơn nữa, đã đăng ký một event handler cho Event.COMPLETE
, sẽ chạy phương thức đó: completeHandler
. Sự kiện di chuyển lên chuỗi rồi quay xuống. Các target
là một trong đó gửi đi sự kiện, vì vậy kể từ khi child
gửi nó, nó phải là hằng số. currentTarget
là những gì thay đổi.
Điều này có nghĩa là, giả sử bạn muốn kiểm tra thời điểm bạn đang di chuyển qua một DataGrid trong Flex, bạn muốn biết khi nào bạn cuộn qua hộp kiểm bên trong một trong những mụcRenderers trong DataGrid. Một cách là để thêmEventListener vào tất cả các hộp kiểm của ItemRenderer cho MouseEvent.ROLL_OVER
. Một cách khác là để addEventListener để DataGrid bản thân cho MouseEvent.ROLL_OVER
, và kiểm tra những gì mục tiêu là về sự kiện này:
protected function dataGrid_rollOverHandler(event:MouseEvent):void
{
// event.currentTarget is DataGrid
if (event.target is CheckBox)
trace("rolled over checkbox!");
}
Đó là cách tôi thường sử dụng event.target
.
Hy vọng rằng sẽ giúp, Lance
Như vậy có thể giúp:
http://livedocs.adobe.com/flex/3/html/help.html?content=events_08.html#219548
Bạn nên đi qua các hướng dẫn trên trang web này: http://www.adobe.com/devnet/flex/videotraining/ cho một giới thiệu về Flex trước khi hỏi một câu hỏi như thế này. Câu hỏi của bạn được đề cập đến vào ngày 1.