0

我不确定我是否误解了 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;

设置断点并单步执行代码,我确认这个 like 被调用并且 friendsSearchResults 被更新。

据我了解,如果我更新可绑定变量,它应该自动重新渲染具有该变量的 dataProvider 的 s:DataGroup。

4

1 回答 1

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"));
}

要记住的另一件事是绑定隐藏了某些错误,例如空引用异常。他们假设该值根本不可用并抑制错误。逐步完成分配和相关绑定将有助于发现这样的问题。

于 2010-03-30T02:59:21.810 回答