我在其他地方找不到我想要的东西,或者至少没有足够的成就来适应
我正在尝试创建一个项目,显示带有徽标,收听按钮等的广播电台
数据源是一个xml文件,其子标记如'name','image'和'listen',用于每个父级'station'。 我通过主应用程序使用creationComplete =“radioService.send()”访问此数据 然后我可以通过dataProvider =“{radioService.lastResult.stations.station}
在主应用上使用它但是,我想使用结果在组件本身的自定义组件中填充变量
硬编码示例
mx:Image source =“Images / BBC5.gif”id =“bbc5Logo”“/>
mx:LinkButton id =“bbc5Listen”click =“bbc5Listen_clickHandler(event)”/>
和点击处理程序
protected function bbc5Listen_clickHandler(event:MouseEvent):void {
var url:String =“http://www.bbc.co.uk/iplayer/console/bbc_radio_five_live”; var request:URLRequest = new URLRequest(url);
} 任何帮助,非常感谢
答案 0 :(得分:0)
之前我做过类似的事情,虽然我不确定你希望你的应用程序有什么外观和感觉,但是可以创建一个Datagrid并将数据源绑定到该网格。 然后,您可以向数据源添加字段(img字段并通过将xpath设置为该字段来使用XML中的链接),也可以创建一个按钮并将其放在datagrid的行中以进行监听。 / p>
显然,这是一个稍微不同的实现,但如果您创建了一个自定义组件,那么同样的原则也适用,然后确保它使用DataSource和DataSource字段,这些字段将从XML的正确部分获取数据。然后,可以将该DataSource字段映射到String,例如。
希望这有帮助
答案 1 :(得分:0)
另一种方法可能是从XML创建Value Objects并将组件绑定到这些对象,这样就可以将组件与XML分离,如果在将来的某个时候,您可能不方便例如,使用XML,但使用JSON。
每个Value Object都有你问题中定义的属性,即imageSource,id,url等......每个组件都绑定到一个Value Object
编辑 看看这个视频培训,它涵盖了从XML的数据检索,ValueObjets的ArrayCollections等... http://www.adobe.com/devnet/flex/videotraining.html
答案 2 :(得分:0)
您实际上可以使用自定义事件,您可以将值从主应用程序传递到自定义组件。
http://www.anujgakhar.com/2009/03/04/flex-passing-data-with-custom-events/
答案 3 :(得分:0)
有两种方法可以实现这一目标:
[Bindable]
actionscript
对象(不是强制性的,但你可以
处理它更容易),并绑定这些数据实例的数组(比如说RadioChannel.class)作为网格的dataProvider。在您的itemRenderer实现中,您可以通过data
getter / setter访问当前行的RadioChannel实例:<强> RadioChannel.as:强>
[Bindable]
public class RadioChannel {
private var _name: String;
private var _imageUrl: String;
private var _listenUrl: String;
public function RadioChannel()
{
}
public function get name():String {return _name;}
public function set name(value:String):void {_name = value;}
public function get imageUrl():String {return _imageUrl;}
public function set imageUrl(value:String):void {_imageUrl = value;}
public function get listenUrl():String {return _listenUrl;}
public function set listenUrl(value:String):void {_listenUrl = value;}
public function toString():String
{
return 'RadioChannel ' + name + ' - image: ' + imageUrl +
' | listen at ' + listenUrl;
}
}
RadioList.mxml:
<?xml version="1.0" encoding="utf-8"?>
<mx:DataGrid xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:mx="library://ns.adobe.com/flex/mx" dataProvider="{radioChannels}">
<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
private var _radioChannels:ArrayCollection = new ArrayCollection();
[Bindable]
private function get radioChannels():ArrayCollection {return _radioChannels;}
private function set radioChannels(value:ArrayCollection):void {_radioChannels = value;}
]]>
</fx:Script>
<mx:columns>
<mx:DataGridColumn>
<mx:itemRenderer>
<fx:Component>
<mx:Image source="{data.imageUrl}">
<fx:Script>
<![CDATA[
public override function set data(value:Object):void
{
super.data = value;
trace('current instance: ' + RadioChannel(data).toString());
}
]]>
</fx:Script>
</mx:Image>
</fx:Component>
</mx:itemRenderer>
</mx:DataGridColumn>
<mx:DataGridColumn dataField="name" />
<mx:DataGridColumn>
<mx:itemRenderer>
<fx:Component>
<mx:HBox>
<fx:Script>
<![CDATA[
protected function onLinkClicked(event:MouseEvent):void
{
var currentChannel:RadioChannel = RadioChannel(data);
if (data)
{
var request:URLRequest = new URLRequest(currentChannel.listenUrl);
[...]
}
}
]]>
</fx:Script>
<mx:Button click="onLinkClicked(event)" label="Listen" />
</mx:HBox>
</fx:Component>
</mx:itemRenderer>
</mx:DataGridColumn>
</mx:columns>
</mx:DataGrid>
因为对于第二个解决方案,你仍然需要第一个绑定,我会选择第一个,并在本地处理click事件。
希望这会有所帮助。答案 4 :(得分:0)
我认为这可能很有用,要将值从mainApp传递到自定义组件,您可以遵循此方法。由于您拥有mainApp中的值,因此您可以使用parentDocument对象在自定义组件中访问该值。{{1 }}