使用动态加载的外部图像将图标分配给ComboBox的列表

时间:2010-02-05 02:18:59

标签: flash actionscript-3 actionscript components

我正在尝试为ComboBox的一个实例专门实现它,它使用List来显示充满项目的下拉菜单。列表可以包含与其关联的图标,如described in the documentation

var comboBox = addChild(new ComboBox());
comboBox.dataProvider = new DataProvider([{label:'item1',iconClass:IconClass1},{label:'item2',iconClass:IconClass2}]);
comboBox.dropdown.iconField = 'iconClass';

...假设IconClass1和IconClass2是我们库中符号的有效类名,这段代码完美无缺。

这是我的问题 - 这个ComboBox的内容将由XML驱动,动态填充,我真的宁愿将该图标引用包含为文件名而不是类名,这样当实现了整个过程,可以在XML中更改图标,而无需打开Flash并向库中添加新符号。客户通常不擅长那种事情。

理想情况下,我希望能够找到一种方法来引用该图标类实例的容器 - ComboBox.dropdown显然是在某个地方保留对每个列表项的引用,如果我能找到它,我可以动态加载图标图像,然后将它们添加到图标实例中。看看我在说什么?

这可能吗?还有另一种更难以实现的方法吗?

1 个答案:

答案 0 :(得分:1)

我没有尝试过,但我认为你可以使用一个基本的自定义类,比如说ImageIconField,你可以用每个图像实例化,传入DataProvider中的数据并设置iconField。像这样:

var customImageIcon:ImageIconField;
var dataProviderArr:Array = [];
for (var node:XML in xml_data.children()) {
    customImageIcon = new ImageIconField();
    customImageIcon.loadFromFile(node.@icon_path.toString());
    dataProviderArr.push({label:xml_data.@label.toString, iconClass:customImageIcon})
}
combobox.dropdown.iconField = 'iconClass';
combobox.dataProvider = new DataProvider(dataProviderArr);