Событие Itemclick в сетке данных
Проблема может быть резюмирована следующим образом: при щелчке элемента в сетке данных в текстовой области отображается значение элемента, но здесь компоненты являются отдельными и, следовательно, необходимо отправлять события.
My mxml component file :
<?xml version="1.0" encoding="utf-8"?>
<mx:DataGrid xmlns:mx="http://www.adobe.com/2006/mxml" itemClick="itemClickEvent(event);" creationComplete="init()">
<mx:Metadata>
[Event(name="IdSelected", type="one.IdEvent")]
</mx:Metadata>
<mx:Script>
<![CDATA[ import genericReport.*;
import crewUtilization.*;
import utils.*;
import studies.*;
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
import mx.controls.Alert;
import mx.events.ListEvent;
private function itemClickEvent(event:ListEvent):void
{
var _study:Object=event.currentTarget.selectedItem.study;
dispatchEvent(new IDEvent(_ID));
}
]]>
</mx:Script>
<mx:columns>
<mx:DataGridColumn dataField="name" />
<mx:DataGridColumn dataField="userId" />
</mx:columns>
</mx:DataGrid>
////////////////////////////////////////////////// /////////////
Это мой основной файл приложения MXML:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:custom="*">
<mx:TitleWindow label="Scenario Creation" xmlns:mx="http://www.adobe.com/2006/mxml"
xmlns:ns1="ccCreation.*">
<mx:Label text="CC CREATION" width="100%" />
<mx:VBox width="100 %" styleName="scenariovboxStyle">
<custom:studySelector id="dg" />
</mx:VBox>
</mx:TitleWindow>
</mx:Application>
1 ответ
Я думаю, что для StudyId было бы лучше обратиться к dataGrid, а не к dataGrid со ссылкой на studyId. Вы можете добавить это в свой основной mxml:
<mx:TextArea id="studyId" text="{dataGrid.selectedItem.Study}"/>
Это должно работать, потому что TextArea.text будет реагировать на событие изменения свойства DataGrid.selectedItem, поэтому оно будет меняться всякий раз, когда изменяется выбор.
РЕДАКТИРОВАТЬ: Диспетчеризация событий:
Вы можете отправить событие из любого места в вашем коде, и слушатели смогут прослушать это событие. Например:
<mypackage:MyComponent>
...
private function foo():void
{
dispatchEvent(new MouseEvent(MouseEvent.CLICK)); // Dispatches a mouse event whenever foo is called.
}
Теперь вы можете прослушать это событие:
<mypackage:MyComponent id="myComponent"/>
...
myComponent.addEventListener(MouseEvent.CLICK, mouseClickHandler);
private function mouseClickHandler(event:MouseEvent):void
{
... // code to handle that event here.
}
Надеюсь это поможет!
<mx:MainComponent creationComplete="init()" ...>
...
private function init(event:Event):void
{
...
customComponent.addEventListener(StudyEvent.STUDYSELECTED, studySelectedListener);
...
}
private function studySelectedListener(event:StudyEvent):void
{
studyid.text = event.study.studyId; // or wherever you store your studyId value
...
}
...
<mx:MainComponent/>
Когда происходит событие StudyEvent.STUDYSELECTED из вашего customComponent, оно перехватывается вашей основной функцией и вызывается studySelectedListener.