【问题标题】:How can I automatically highlight a select box based on a value from xml?如何根据 xml 中的值自动突出显示选择框?
【发布时间】:2015-02-16 15:34:23
【问题描述】:

我有从 XML 文件中获取值的选择框。当程序加载时,它会自动显示 XML 文件中第一个值的信息。我还需要它在选择框中突出显示该值。

这是它最初加载时的样子

由于它是自动加载这些图像,我希望在选择框中选择该类型(“按颜色”->“巴恩伍德”)

(我继承的代码有很多文件,所以我只展示我认为相关的代码。我对 Flex 的了解非常有限......)

            private function onCatReceived(e:ResultEvent):void
            {
                var cats:Array= new Array();
                loadItems(Globals.compRoot+catDataProvider.lastResult.elements("category")[0].catid);
                for each(var cat:XML in catDataProvider.lastResult.elements("category"))
                {
                    if (cats[cat.parent.toString()])
                    {
                        cats[cat.parent.toString()].addItem(cat);
                    }
                    else
                    {
                        cats[cat.parent.toString()]= new ArrayCollection();
                        cats[cat.parent.toString()].addItem(cat);
                    }

                }
                for (var ct:String in cats)
                {
                    var cnv:Canvas= new Canvas();
                    var dataSort:SortField= new SortField("name",true);
                    var nameSort:Sort= new Sort();
                    nameSort.fields=[dataSort];
                    var source:ArrayCollection=cats[ct];
                    source.sort=nameSort;
                    source.refresh();
                    cnv.label=ct;
                    cnv.horizontalScrollPolicy="off";
                    cnv.verticalScrollPolicy="off";
                    var lst:List= new List();
                    lst.width=166;
                    lst.height=115;
                    lst.labelField="name";
                    lst.styleName="ControllerList";
                    lst.addEventListener(ListEvent.CHANGE,changeCat);

                    lst.dataProvider=cats[ct];
                    Alert.show("ct: " + ct);
                    cnv.addChild(lst);
                    acc.addChild(cnv);
                }
                //Maybe add it here??
                //mouldingList.items.selectedIndex = 0;
                var cnv:Canvas = acc.getChildAt(0) as Canvas;
                var lst:List = cnv.getChildAt(1) as List;
                Alert.show(lst.toString());
                Alert.show(lst.selectedItem.toString());

            }

【问题讨论】:

    标签: xml actionscript-3 apache-flex flex3


    【解决方案1】:
    • 我更改了 Accordion 添加子项的方式,以便我可以控制每个子项的索引
    • 我浏览了 Accordion 中的每个 Canvas 并设置列表的 Accordion 的 selectedIndex,如果它匹配“按颜色”作为标签。

      private function onCatReceived(e:ResultEvent):void
      {
          var cats:Array= new Array();
          loadItems(Globals.compRoot+catDataProvider.lastResult.elements("category")[0].catid);
          for each(var cat:XML in catDataProvider.lastResult.elements("category"))
          {
              if (cats[cat.parent.toString()])
              {
                  cats[cat.parent.toString()].addItem(cat);
              }
              else
              {
                  cats[cat.parent.toString()]= new ArrayCollection();
                  cats[cat.parent.toString()].addItem(cat);
              }
      
          }
          for (var ct:String in cats)
          {
              var cnv:Canvas= new Canvas();
              var dataSort:SortField= new SortField("name",true);
              var nameSort:Sort= new Sort();
              nameSort.fields=[dataSort];
              var source:ArrayCollection=cats[ct];
              source.sort=nameSort;
              source.refresh();
              cnv.label=ct;
      
              cnv.horizontalScrollPolicy="off";
              cnv.verticalScrollPolicy="off";
              var lst:List= new List();
              lst.width=166;
              lst.height=115;
              lst.labelField="name";
              lst.styleName="ControllerList";
              lst.addEventListener(ListEvent.CHANGE,changeCat);
      
              lst.dataProvider=cats[ct];
              //Alert.show("ct: " + ct);
              cnv.addChild(lst);
              acc.addChild(cnv);
      
              switch (ct)
              {
                  case "By Color":
                      acc.addChildAt(cnv, 0);
                      break;
      
                  case "By Material":
                      acc.addChildAt(cnv, 1);
                      break;
      
                  case "By Style":
                      acc.addChildAt(cnv, 2);
                      break;
      
                  default:
                      acc.addChild(cnv);
      
              }
      
      
              //acc.addChildAt(cnv, 0);
          }
      
      
      
          //Set the selected item to be the 0th item
      
          for each (var o:Object in acc.getChildren())
          {
              if (o is Canvas)
              {
                  var c:Canvas = o as Canvas;
                  if ("By Color" == c.label)
                  {
      
                      c.setFocus(); //does this work?
                      c.drawFocus(true); //does this work?
                      acc.selectedIndex = 0; //does this work?
                      for each (var o2:Object in o.getChildren())
                      {
                          if (o2 is List)
                          {
                              var l:List = o2 as List;
      
      
      
                              l.selectedIndex = 0;
                          }
                      }
                  }
              }
          }
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-23
      • 1970-01-01
      • 2021-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-26
      • 1970-01-01
      相关资源
      最近更新 更多