2013-08-27 3 views
0

Итак, в Flex Mobile Project Я пытаюсь связать результаты с помощью Select SQLLite запрос к представлению. Но он не отображает результаты, и я получаю следующиеFlex Mobile Project Warning Предупреждение: невозможно привязать к свойству «myData» в классе «com.amec.controls.Text :: TextListView»

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> 

Также я не получаю никаких результатов, чтобы показать в представлении.

ответ

2

Во-первых, установить свойство быть Bindable:

[Bindable(event="myDataChanged")] 
private function get myData():ArrayCollection{ 
... 
} 

Поскольку у вас нет «набор» определенный метод. Таким образом, всякий раз, когда изменяется «myData», вам придется вручную отправить событие myDataChanged, чтобы Bindable мог повлиять.

Я подозреваю, что вы также должны будете сделать myData() общедоступной собственностью; в противном случае, как классы, которые делают обязательную работу, смогут интроспективно входить в ваш пользовательский компонент, чтобы получить доступ к свойству.

В целом, похоже, вы выбираете очень плохой подход к реализации. Необычно использовать метод get для вызова базы данных и обработки результатов. Это гораздо более распространено для инкапсуляции такого кода из вашего представления; и передать данные результата в представление. Существует много разных способов сделать это. Вы можете сделать это с помощью одноэлементного подхода или рамки внедрения зависимостей или отправки событий из класса службы с данными результата.

+0

Итак, я добавил событие bindable, но результаты запроса не отображаются в представлении. Что я сделал здесь неправильно? – yams

+0

Прошли ли вы через свой код, чтобы убедиться, что метод get отправлен? Событие «myDataChanged» когда-либо отправляется? Если не; то привязка никогда не повлияет. – JeffryHouser

+0

Я прошел через код, и он никогда не идет дальше, чем x.parameters [": id"] = id ;. – yams