绑定有问题

时间:2010-03-30 00:03:12

标签: flex data-binding cairngorm

我不确定我是否误解了Flex中的绑定。我正在使用Cairngorm框架。我有以下组件,代码如下:

        [Bindable]
        var _model:LalModelLocator = LalModelLocator.getInstance();
....
<s:DataGroup    dataProvider="{_model.friendsSearchResults}"
                     includeIn="find"
                     itemRenderer="com.lal.renderers.SingleFriendDisplayRenderer">
            <s:layout>
                <s:TileLayout orientation="columns"    requestedColumnCount="2" />
            </s:layout>         </s:DataGroup>

在模型定位器中:

[Bindable]
public var friendsSearchResults:ArrayCollection = new ArrayCollection();

在项目渲染器中有一个调用命令的按钮,在命令结果中有一行如下:

model.friendsSearchResults = friendsSearchResults;

提出断点并单步执行代码我确认调用了这个,并且更新了friendsSearchResults。

据我所知,如果我更新一个可绑定变量,它应该自动重新呈现s:DataGroup,它具有该变量的dataProvider。

1 个答案:

答案 0 :(得分:1)

代码示例中没有明显错误。它应该工作所以我认为其他地方有问题。

我建议设置一个断点,分配dataProvider以及分配model.friendsSearchResults的位置。确保它们都指向同一个对象实例。然后逐步完成属性赋值和相应的事件。

为了使调试更容易,您可以切换到使用命名事件而不是默认事件。对于命名事件,仅触发对您的特定属性感兴趣的事件侦听器,而不是任何侦听任何属性更改的侦听器。这更容易调试,运行速度更快。例如,更改:

[Bindable]
public var results:ArrayCollection;

[Bindable("resultsChanged")]
private var _results:ArrayCollection;
public function get results():ArrayCollection {
    return _results;
}
public function set results(value:ArrayCollection):Void {
    _results = value;
    dispatchEvent(new Event("resultsChanged"));
}

要记住的另一件事是绑定会隐藏某些错误,例如null引用异常。他们认为该值尚不可用并且可以抑制错误。单步执行赋值和相关绑定将有助于找到这样的问题。