小编Gur*_*ona的帖子

Flex懒惰绑定

受Hibernate的延迟加载能力的启发,我希望仅在必要时使模型成为我的Flex UI请求数据的一部分.我认为这就像添加一个只在访问变量时才发送服务器请求的公共访问器一样简单.

public function get tab2AC():ArrayCollection
{
    if(_tab2AC == null){
        //Request data from server
    }
    return _tab2AC;
}
Run Code Online (Sandbox Code Playgroud)

问题是Flex似乎在应用程序启动时访问所有绑定变量,即使尚未创建引用组件.因此,即使dataProvider="{tab2AC}"尚未创建DataGrid ,服务器请求仍然会消失,从而打败"仅在需要时"懒惰.

我不想将服务器请求放在creationComplete处理程序中,因为我想让我的UI模型不知道视图状态和我的视图无视服务器请求.

有趣的是,如果我Alert.show("anything");在访问器中添加一个内部,它可以按需运行.

更新:这是一个完整的例子.设置断点,即使任何创建的组件都没有使用titleForScreen2,您也会看到Flex访问这两个变量.

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
xmlns:s="library://ns.adobe.com/flex/spark" 
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">
<fx:Script>
    <![CDATA[
        private var _titleForScreen1:String;
        private var _titleForScreen2:String;

        public function get titleForScreen1():String {
            if(_titleForScreen1 == null){
                //Server Request
            }                   
            return _titleForScreen1;
        }

        public function get titleForScreen2():String {
            if(_titleForScreen2 == null){
                //Server Request
            }
            return _titleForScreen2;
        }
    ]]>
</fx:Script>

<mx:ViewStack>
    <s:NavigatorContent label="Screen 1"> …
Run Code Online (Sandbox Code Playgroud)

apache-flex binding lazy-loading

5
推荐指数
1
解决办法
832
查看次数

标签 统计

apache-flex ×1

binding ×1

lazy-loading ×1