如何绑定到 ArrayCollection 中的第一项?

发布于 2024-08-03 20:43:34 字数 936 浏览 3 评论 0原文

我的应用程序使用 MVC 模型。该模型包含一个 Bindable 类 (BindableItemsClass),其中包含一个 ArrayCollection。我想将视图中的一些内容绑定到 Bindable 类的 ArrayCollection 中的第一项(因此属性“firstItem”)。

问题是,当使用 setter 'set firstItem(value:Object)' 时,绑定到该属性的视图组件不会更新。

有没有办法手动触发属性“firstItem”的绑定?

[Bindable]
public class BindableItemsClass extends EventDispatcher
{
    private var _items:ArrayCollection;

    public function get items():ArrayCollection
    {
        return _items;
    }

    public function set items(value:ArrayCollection):void
    {
        _items = value;
    }

    public function get firstItem():Object
    {
        if(_items && items.length>0)
            return items[0];
        else
            return null;
    }

    public function set firstItem(value:Object):void
    {
        if(value)
            items = new ArrayCollection([value]);
        else
            items = new ArrayCollection();
    }
}

My application works with the MVC model. The model contains a Bindable class (BindableItemsClass) which contains an ArrayCollection. I want to bind some stuff in the view to the first item in the ArrayCollection of the Bindable class (hence the property 'firstItem').

The problem is that when the setter 'set firstItem(value:Object)' is used, the view components that are bound to that property aren't updated.

Is there a way to trigger the bindings of the property 'firstItem' manually?

[Bindable]
public class BindableItemsClass extends EventDispatcher
{
    private var _items:ArrayCollection;

    public function get items():ArrayCollection
    {
        return _items;
    }

    public function set items(value:ArrayCollection):void
    {
        _items = value;
    }

    public function get firstItem():Object
    {
        if(_items && items.length>0)
            return items[0];
        else
            return null;
    }

    public function set firstItem(value:Object):void
    {
        if(value)
            items = new ArrayCollection([value]);
        else
            items = new ArrayCollection();
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

谁的新欢旧爱 2024-08-10 20:43:34

调度一个更改事件来触发 setter 中的绑定:

dispatchEvent(new FlexEvent(FlexEvent.DATA_CHANGE));

这应该有效。

如果没有,那么您可能还需要注释您的 getter:

[Bindable("dataChange")]
public function get firstItem():Object
{
    if(_items && items.length>0)
        return items[0];
    else
        return null;
}

这显式定义了函数的绑定侦听器,因此监视此侦听器的属性将了解要侦听的事件。

dispatch a change event to trigger the binding in the setter:

dispatchEvent(new FlexEvent(FlexEvent.DATA_CHANGE));

That SHOULD work.

if not, then you might also need to annotate your getters:

[Bindable("dataChange")]
public function get firstItem():Object
{
    if(_items && items.length>0)
        return items[0];
    else
        return null;
}

This explicitly defines a binding listener to the function so properties watching this will understand what event to listen for.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文