【问题标题】:DataBinding is not working properly in custom list itemrendererDataBinding 在自定义列表 itemrenderer 中无法正常工作
【发布时间】:2013-05-17 12:41:54
【问题描述】:

我正在使用 Flex/Air 开发 iPad 应用程序。 我在自定义列表项渲染器中遇到数据绑定问题。

我有一个包含类集合的列表作为数据提供者。 每个类都启用了一个静态属性。我使用项目渲染器显示每个类,其中启用 Class 属性时启用我的项目渲染器。

类看起来像这样:

public class MyClass
{
   public static const var name:String = "My Class";
   private static var enabled:Boolean = false;


   [Bindable]
    public static function get enabled():Boolean
    {
        return enabled;
    }

    public static function set enabled(value:Boolean):Boolean
    {
        enabled = value;
    }

}

然后我有列表:

<list dataProvider={new ArrayCollection([MyClass])} itemRenderer="CustomItemRenderer"/>

CustomItemRenderer 看起来像这样:

<s:ItemRenderer autoDrawBackground="false" enabled={data.enabled}>

   <s:label text={data.name}/>

<s:/ItemRenderer>

所以当我更改 MyClass 的启用属性时,列表不会更新。 项目渲染器仍处于禁用状态。

MyClass.enabeled = true;

你知道问题是什么吗?

提前感谢您! 伊万

【问题讨论】:

  • 请分享一些代码。例如,我不知道这是什么意思“我使用项目渲染器显示每个类,当启用 Class 属性时,我的项目渲染器被启用。”您不能更改类的属性——除非它们是静态属性,这可能不是这里的情况。您必须在类的实例上更改它们。您要更改哪些属性;你如何改变它们?您可能需要在 ArrayCollection 上调用 itemUpdated
  • 你好,我已经分享了一些例子。我希望它能帮助你更好地理解我的问题。感谢您的关注。

标签: ipad apache-flex mobile air


【解决方案1】:

试试这个(我在没有IDE的情况下编辑了代码,应该是正确的想法):

// to dispatch a custom event your class needs to extends the EventDispatcher Class.
public class MyClass extends EventDispatcher
{
   public static const var name:String = "My Class";
   private static var _enabled:Boolean = false;


    // getter & setter with dispatchEvent could not be static...
    // instead the getter/setter for enabled, will change the static _enabled value.    
   [Bindable(event="enabledChange")]
    public function get enabled():Boolean
    {
        return _enabled;
    }

    public function set enabled(value:Boolean):void
    {
        _enabled = value;
        dispatchEvent(new Event("enabledChange"));
    }

}

【讨论】:

  • 感谢您的回复。我需要静态访问设置器:MyClass.enabled;如您所见,列表的 dataProvider 是一个带有类的集合。然后 itemRenderer 的数据属性是一个类,我需要访问这个类的属性,但不使用类的实例
  • Afaik 在 actionscript 中不可能 dispatchEvent 在静态类/属性上......所以你可能需要改变你的逻辑......
  • 我明白了!感谢您花时间帮助我!
猜你喜欢
  • 2019-10-24
  • 1970-01-01
  • 2016-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多