Sqlite Flex Mobile项目警告“警告:无法绑定到类'com.amec.controls.Text::TextListView'上的属性'myData'”

Sqlite Flex Mobile项目警告“警告:无法绑定到类'com.amec.controls.Text::TextListView'上的属性'myData'”,sqlite,apache-flex,data-binding,flash-builder,flex-mobile,Sqlite,Apache Flex,Data Binding,Flash Builder,Flex Mobile,因此,在Flex Mobile项目中,我试图将Select SQLLite查询的结果绑定到视图。但它并没有显示结果,我得到了以下信息 warning: unable to bind to property 'myData' on class 'com.amec.controls.Text::TextListView' 来自FLash Builder。下面是我的观点课。我错过了什么或做错了什么 <?xml version="1.0" encoding="utf-8"?> <a

因此,在Flex Mobile项目中,我试图将Select SQLLite查询的结果绑定到视图。但它并没有显示结果,我得到了以下信息

 warning: unable to bind to property 'myData' on class 'com.amec.controls.Text::TextListView'
来自FLash Builder。下面是我的观点课。我错过了什么或做错了什么

<?xml version="1.0" encoding="utf-8"?>
<amec:BaseAddView xmlns:fx="http://ns.adobe.com/mxml/2009" 
              xmlns:s="library://ns.adobe.com/flex/spark" 
              xmlns:amec="com.amec.Components.*"
              creationComplete="vw_creationCompleteHandler(event)" title="TextListView">
<amec:layout>
    <s:VerticalLayout horizontalAlign="center" paddingLeft="5" paddingRight="5" paddingTop="5" paddingBottom="5"/>
</amec:layout>
<fx:Script>
    <![CDATA[
        import com.amec.BaseSql;
        import com.amec.MenuMessage;

        import mx.events.FlexEvent;


        [Bindable]private var resultArr:ArrayCollection = new ArrayCollection();

        import mx.collections.ArrayCollection;


        protected function vw_creationCompleteHandler(event:FlexEvent):void
        {

        }

        private function get myData():ArrayCollection
        {

            var conn:BaseSql = new BaseSql();
            conn.stmt.text = "SELECT DMV_VALUE_1 FROM DOMAIN_VALUE WHERE DMV_DMN_ID = :id";
            x.parameters[":id"] = id;
            x.sqlConnection = conn.stmt.sqlConnection;
            var x:SQLStatement = new SQLStatement;

            x.text = conn.stmt.text;

            x.execute();
            var result:Array = conn.stmt.getResult().data;
            var r:ArrayCollection = new ArrayCollection();


            if (result)
            {      
                r.source = result;        
                return r;
            } else {
                return null;
            }


        }

    ]]>
</fx:Script>
<s:List id="list" top="0" bottom="0" left="0" right="0" 
        dataProvider="{myData}" labelField="DMV_VALUE_1">
</s:List>

<fx:Declarations>
    <!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>

此外,我没有在视图中显示任何结果。

首先,将属性设置为:

因为没有定义“set”方法。因此,每当“myData”发生更改时,您都必须手动调度myDataChanged事件,以便Bindable产生影响

我怀疑您还必须使myData成为公共财产;否则,使绑定工作的类将如何能够内省到自定义组件中以访问属性


总体而言,您似乎选择了一种非常糟糕的实现方法。使用get方法进行数据库调用并处理结果是不常见的。在视图之外封装这样的代码更为常见;并将结果数据传递到视图中。有很多不同的方法可以做到这一点。您可以使用单例方法,或者依赖项注入框架,或者使用结果数据从服务类调度事件

好的,我添加了bindable事件,但是查询的结果没有显示在视图中。我在这里做错了什么?您是否仔细检查了代码以确保get方法被调度?是否调度过“myDataChanged”事件?若否,;然后绑定将永远不会生效。我仔细检查了代码,它永远不会超过x.parameters[:id]=id;。很抱歉,我已将其修复,但它被固定在var result:Array=conn.stmt.getResult.data;如果它从未超过某一行代码;这意味着您的代码中有某种类型的bug需要修复。您是否安装了Flash Player的调试版本,以便查看错误的完整堆栈跟踪?
[Bindable(event="myDataChanged")]
private function get myData():ArrayCollection{
 ...
}