我正在使用以下网站中的combocheck示例: http://www.carballares.es/en/arcadio/?p=220
这是一个非常有用的组件,效果很好。
现在,我需要在应用程序启动时使用某些值(根据某些条件动态定义)设置此组合框的text属性。问题是虽然我在应用程序运行的其他时间设置组合框的text属性没有问题,但是在启动时设置属性似乎不幸没有效果。
例如,我想将组合框的text属性设置为“Bob”(这是组合框的数据提供者中的项目之一),并在组合框中调用“set text”方法。执行步骤显示“set text”方法正在接收正确的值项但未设置_text属性。
在“ApplicationComplete”之前我没有尝试过任何事情,但也没有任何欢乐。
提前感谢您提供的任何帮助或线索。
//编辑 这是代码(来自上面的URL的代码和对它的一些其他更改的组合)。但是,正如我上面所说,代码确实有效。问题是它在应用程序启动时不起作用。每当触发事件并调用setComboText时,组合框的文本都会正确设置。
private function onComboChecked(event:ComboCheckEvent):void {
var obj:Object=event.obj;
var index:int=selectedItems.getItemIndex(obj);
if (index==-1) {
selectedItems.addItem(obj);
} else {
selectedItems.removeItemAt(index);
}
setComboText();
dispatchEvent(new Event("valueCommit"));
dispatchEvent(new Event("addItem"));
}
public function setComboText():void {
if (selectedItems.length>1) {
// text='multiple'
//modified by samuel
var items:ArrayCollection = selectedItems;
var selItems:String = "";
for (var item:String in items)
{
if (items[item].label != "ALL" ) {
selItems = selItems + items[item].label + ",";
}
}
if (selItems.length > 0){
selItems = selItems.substr(0,selItems.length - 1);
}
text = selItems;
}
if (selectedItems.length==1) {
text=selectedItems.getItemAt(0)[labelField];
}
if (selectedItems.length<1) {
//modified by samuel
text="ALL";
//Alert.show("text is "+text);
}
}
答案 0 :(得分:1)
尝试将此方法添加到您要扩展的主ComboBox组件中:
public function set selectedValueList( val : String ) : void {
var selectedValueArray :Array = val.toLowerCase().split(',');
var dp :ArrayCollection = this.dataProvider as ArrayCollection;
var newSelectedItems:ArrayCollection=new ArrayCollection();
for each ( var selectedVal :String in selectedValueArray ){
for( var i :uint=0;i<dp.length;i++){
if( String(dp.getItemAt(i)[this.labelField]).toLowerCase() == selectedVal ){
newSelectedItems.addItem( dp.getItemAt(i) );
}
}
}
selectedItems = newSelectedItems;
if (selectedItems.length>1) { text='multiple'; }
if (selectedItems.length==1) { text=selectedItems.getItemAt(0)[labelField]; }
if (selectedItems.length<1) { text=''; }
dispatchEvent(new Event("valueCommit"));
dispatchEvent(new Event("addItem"));
}
然后,当您想要设置所选项目时,您将这样调用它:
myComboId.selectedValueList = 'Selected Label 1,Selected Label 2';
或者在组件mxml def:
中设置它<local:ComboBox selectedValueList="Selected Label 1,Selected Label 2" ...rest of properties.../>
或绑定到它:
<local:ComboBox selectedValueList="{variableHoldingCommaDelimList}" ...rest of properties.../>
让我知道它是怎么回事。 :)
答案 1 :(得分:0)
在组合框的情况下,我不确定“set text”是什么意思。相反,它应该是您应该设置的selectedIndex。除此之外,不是applicationComplete OR creationComplete,而是覆盖commitProperties方法并在那里分配这个初始属性(尽管你可以简单地在mxml中指定selectedIndex)。