Ссылки в датагриде (flex) - PullRequest
2 голосов
/ 01 сентября 2009

Я хотел спросить, как я могу поместить ссылки в сетку данных. Мой dataProvider - это фоллинг xml

<xml>
 <item>
  <name>A name</name>
  <url>A url</name>
 </item>
 <item>
  <name>Another name</name>
  <url>Another url</name>
 </item>
</xml>

конечно, с еще некоторыми предметами. Теперь я хочу иметь сетку данных, которая отображает имя в виде метки, и при нажатии на строку открывается URL-адрес.

Может ли кто-нибудь помочь мне с этим? Я знаю кое-что о средствах визуализации предметов, но не знаю, как я могу дать URL для средства визуализации предметов. Может с классной фабрикой? Но как я могу контролировать, какой URL-адрес указан для конкретного средства визуализации элементов?

Заранее спасибо

Sebastian

Ответы [ 2 ]

1 голос
/ 04 марта 2011

Я думаю, что лучший способ сделать это - использовать средство визуализации элементов:

Сконфигурируйте свою сетку данных с помощью средства визуализации элементов следующим образом:

<mx:DataGrid id="flashcardSetGrid" width="80%" maxHeight="800" >
<mx:columns >
    <mx:DataGridColumn itemRenderer="com.jeshurunsoftware.DgLinkButton"/>
</mx:columns>

Затем создайте компонент MXML (в этом примере, упакованный в com.jeshurunsoftware.DgLinkButton.mxml):

<s:MXDataGridItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
                      xmlns:s="library://ns.adobe.com/flex/spark" 
                      xmlns:mx="library://ns.adobe.com/flex/mx" 
                      focusEnabled="true">
      <mx:LinkButton id="lblData" label="{dataGridListData.label}" click="doSomething()"  />
</s:MXDataGridItemRenderer>

Когда вы щелкнете по этому пункту, ваше действие будет выполнено.

1 голос
/ 01 сентября 2009

Можете ли вы просто делать то, что хотите, используя обработчики событий click?

<mx:Script>
    <![CDATA[
        import flash.net.navigateToURL;


        protected function datagrid1_clickHandler(event:MouseEvent):void
        {
            if(dg1.selectedItem)
            {
                var request:URLRequest = new URLRequest(dg1.selectedItem.url);
                navigateToURL(request);
            }
        }

        [Bindable]
        public var xml:XML = new XML(<xml>
        <item>
            <name>A name</name>
            <url>http://www.google.com</url>
        </item>
        <item>
            <name>Another name</name>
            <url>http://www.yahoo.com</url>
        </item>
    </xml>);
    ]]>
</mx:Script>
<mx:DataGrid id="dg1" editable="true" click="datagrid1_clickHandler(event)" dataProvider="{xml.children()}">
    <mx:columns>
        <mx:DataGridColumn dataField="name" />
    </mx:columns>
</mx:DataGrid>
...