首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在包含项呈现器的类中调用方法

在包含项呈现器的类中调用方法
EN

Stack Overflow用户
提问于 2012-01-20 03:11:57
回答 5查看 443关注 0票数 0

狗班级。请注意,狗不知道它的位置。从逻辑上讲,狗不应该知道它的位置。

代码语言:javascript
复制
public class Dog { 
    public var name:String;
    public var age:Number;
}

一个UI组件,在列表中显示所有的狗。有一种方法可以确定狗是否逃走了。

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<s:VGroup ... >
    <fx:Script>
        <![CDATA[
            [Bindable]
            private var listDataProvider:ArrayCollection /* ArrayCollection of Dogs */

            public var hasDogEscaped(dog:Dog):Boolean {
                return ...;
            }
        ]]>
    </fx:Script>
    <s:List id="list" dataProvider="{listDataProvider}" itemRenderer="DogItemRenderer"/> 
</s:VGroup>

一个项目渲染器,显示狗的名字,如果狗已经逃脱了狗的名字旁边的解释标记。

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<s:ItemRenderer ...>
    <s:Label text="{(data as dog).name}" verticalAlign="middle" height="100%"/>

    <mx:Image id="dogEscaped" 
              visible="{???????????????????????????????????????.hasDogEscaped(data as Dog)}"
              source="@Embed(source='/assets/icons/warning.png')"/>
    </s:Group>
</s:ItemRenderer>

我想要做的是让项目呈现器从项目呈现器调用hasDogEscaped方法,但我还不知道如何做到这一点。任何帮助都将不胜感激。

EN

回答 5

Stack Overflow用户

发布于 2012-01-20 05:18:44

我不会绑定到这个函数。不管怎么说,你不需要这样做。

代码语言:javascript
复制
override public function set data(value:Object):void{
   if(value){
    super.data = value;
    dogEscaped.visible = yourFunction(data);
   }
}

现在,如果您希望将非静态版本的yourFunction传递到dataGrid中,则需要将其作为属性添加。为此,您需要使用ClassFactory将属性传递给您的itemRenderer。基本上看起来是这样的:

代码语言:javascript
复制
 dogItemRenderer= new ClassFactory(DogIteMRenderer);
 dogItemRenderer.properties = {dogEscapedFunction: dogEscapedFunction};
 dogColumn.itemRenderer = dogItemRenderer;

现在确保您的itemRenderer中有一个名为dogEscapedFunction的属性。

票数 2
EN

Stack Overflow用户

发布于 2012-01-20 03:21:48

简而言之,您需要在Dog类上添加一个isVisible属性。虽然狗不应该知道它的位置-它确实需要知道它是否可见。创建进入(和离开)项目渲染器的路径通常不是一个好主意。(如果这超出了Dog类的范围,那么您可以使用Adapter模式来包装现有类并添加额外的属性。)项目呈现器需要接收正确显示所呈现内容所需的所有数据。

您可以在定义s:List的MXML文件中设置此属性的值,然后覆盖项目渲染器上的set data方法,以确定Image是否应可见。

票数 0
EN

Stack Overflow用户

发布于 2012-01-20 05:26:55

项目呈现器仅用于显示您的数据,而不用于应用程序逻辑。

由于您的arrayCollection已经是可绑定的,因此您应该向它添加一个事件侦听器,以便在更改时调用hasDogEscaped。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8931849

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档