【问题标题】:Flex 3 - List - checkbox itemrenderer enabled propertyFlex 3 - 列表 - 复选框 itemrenderer 启用的属性
【发布时间】:2010-11-10 17:55:46
【问题描述】:

我有一个使用复选框 itemrenderer 的列表。数据提供者是一群人。当我从文件加载数据时,每个列表项都会显示人的姓名(姓氏,名字——labelFunction),复选框的选定属性会显示人的包含属性。即,

史密斯,道格 - [x] 威廉姆斯,鲍勃 - [ ] 莫里斯,安妮 - [x]

但是,每个人也有一个 active 属性。我想为不活跃的人禁用复选框(意思是“你不能包括不活跃的人”)。我已经尝试了几种方法来让它工作,包括这里建议的http://forums.adobe.com/thread/416786 在数据网格中做同样的事情。但是,它们都不起作用,并且无论此人的 活动 状态如何,所有复选框都已启用。这是我的基本代码:

<mx:List id="peopleIncludedList"
     dataProvider="{someProvider}"
     labelFunction="peopleLabelFunction">
     <mx:itemRenderer>
          <mx:Component>
               <mx:CheckBox change="onChange(event)"
                    selected="{outerDocument.isIncluded(data)}">
                    <mx:Script>
                         <![CDATA[

                              private function onChange(e:Event):void
                              {
                                   ...
                              }
                         ]]>
                    </mx:Script>
               </mx:CheckBox>
          </mx:Component>
     </mx:itemRenderer>
</mx:List>

对此的任何帮助将不胜感激。谢谢。

-- 伊恩

【问题讨论】:

    标签: apache-flex list checkbox adobe itemrenderer


    【解决方案1】:

    我会试一试,但有时如果没有样本数据就很难判断。

    首先,在arenderer中不要引用outerDocument,也不要使用绑定,而是监听dataChange事件

    <mx:List id="peopleIncludedList"
         dataProvider="{someProvider}"
         labelFunction="peopleLabelFunction">
         <mx:itemRenderer>
              <mx:Component>
                   <mx:CheckBox change="onChange(event)" dataChange="onDataChange()">
                        <mx:Script>
                             <![CDATA[
    
                                  private function onChange(e:Event):void
                                  {
                                      // not sure what this method is doing
                                  }
    private function onDataChange():void{
     this.selected = isIncluded(data); // whatever your processing is
     if(data.person.active == true){
       this.enabled = true;
     } else {
       this.enabled = false;
     }
    }
                             ]]>
                        </mx:Script>
                   </mx:CheckBox>
              </mx:Component>
         </mx:itemRenderer>
    </mx:List>
    

    【讨论】:

    • 难道他不只是摆脱 而不必担心数据更改事件吗?假设 person 和 active 当然是可绑定的......
    • @Gregor Kiddie 我不确定;我认为他有两个问题;检查/取消选中 CheckBox 并启用/禁用它。我猜他可以同时使用 bindig 假设它们与数据对象上的属性相关。他为选定的方法调用了一种方法,这一事实使这种假设变得模棱两可。不过,在 itemRenderer 中绑定最终会导致问题。
    • @Jeff。我肯定会的,但是使用绑定得到一些答案,而一些位不会混淆我认为的问题。例如,使用 ClassFactory 为 isIncluded(...) 设置值将是一种更好的方法。这是更大的问题!尝试回答人们的问题,以便他们可以继续,或者首先教育他们如何做得更好......
    • @Gregor Kiddie 我修改了我的答案以删除复选框上的绑定。这只是我在原始代码的剪切和粘贴工作中遗漏的东西。代码已经更改了 onDataChange 方法中的选定值。据我所知,我确实会尝试回答人们的问题,以便他们继续并教育他们如何做得更好;如果你觉得我不这样做,我很抱歉。
    • 哇...这不是挖苦!这对我自己来说是一种沉思,因为我经常犯第一个罪(按原样回答问题而不是重新教育)。可能是为什么你的 Rep 比我的高得多;)
    【解决方案2】:

    由于 stackoverflow 每天只通知我新的答案,因此我没有积极查看此线程,而是更多地参与了 Adob​​e 板。无论如何,找到了解决方案。在此处引用它http://forums.adobe.com/message/3267367。感谢大家的建议和帮助!

    【讨论】:

      猜你喜欢
      • 2012-01-21
      • 1970-01-01
      • 1970-01-01
      • 2012-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-14
      • 1970-01-01
      相关资源
      最近更新 更多