2013-06-04 6 views
0

Я на самом деле работаю над кодом другого пользователя, но я не могу понять что-то, я нахожу, что доступ к датапровердеру очень специфичен в части mxml.Flex: arrayCollection in dataProvider

экстракт 1:

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

[Bindable] 
public var obj:Object = new Object(); 

экстракт 2:

adrDataList.getItemAt(0).id = null; 
adrDataList.getItemAt(0).natureVoie = null; 
adrDataList.getItemAt(0).numeroVoie = null; 
adrDataList.getItemAt(0).nomVoie = null; 
adrDataList.getItemAt(0).commune = null; 
adrDataList.getItemAt(0).complementAdresse = null; 
adrDataList.getItemAt(0).codePostal = null; 
    obj.index = i;   
    obj.statutGeocodage = _model.service.getItemAt(i).statutGeocodage; 
    obj.coordX = "484646868" 
    obj.coordY = "455446846"      
    adrDataList.addItemAt(obj, 0); 

это MXML часть:

<view:CustomDataGrid id="dgAdr" height="80" width="989" allowMultipleSelection="true" 
    editable="{_model.isGeocodageActif}" 
    styleName="DataGrid" dataProvider="{adrDataList}" itemEditEnd="onEditItem(event)"> 
    <view:columns> 
     <mx:DataGridColumn headerText="NumeroVoie" dataField="numeroVoie"/> 
     <mx:DataGridColumn headerText="NatureVoie" dataField="natureVoie"/>  
     <mx:DataGridColumn headerText="NomVoie" dataField="nomVoie"/> 
     <mx:DataGridColumn headerText="Commune" dataField="commune"/> 
     <mx:DataGridColumn headerText="CodePostal" dataField="codePostal"/> 
     <mx:DataGridColumn headerText="Géocod" editable="false"> 
      <mx:itemRenderer> 
       <mx:Component> 
        <mx:Text text="{(data.coordX == 0)? '' : data.coordX} - {(data.coordY == 0)? '' : data.coordY}" /> 
       </mx:Component> 
      </mx:itemRenderer>   
     </mx:DataGridColumn> 
     <mx:DataGridColumn headerText="Géocodage" editable="false" dataField="statutGeocodage"> 
        <mx:itemRenderer> 
         <mx:Component> 
          <formatter:geocodBtn color="{data.statutGeocodage}" horizontalAlign="center" 
           enabledBtns="{outerDocument._model.isGeocodageActif}" 
           click="outerDocument.onGeoClick(data.id, data.numeroVoie, data.natureVoie, data.nomVoie, data.commune, data.codePostal, data.idTechnicien, data.complementAdresse,event)"> 
          </formatter:geocodBtn> 
         </mx:Component> 
        </mx:itemRenderer> 
     </mx:DataGridColumn>   
    </view:columns> 
</view:CustomDataGrid> 

То, что я не получаю почему data.coordX является за работой? она не должна быть data.obj.coordX

Благодаря

Ps: Я использую Flex SDK 3.5

+0

Что вы хотите исследования как компонент Flex 'List' использует элемент ItemRenderer для отображения элементов списка. В «List» используется объединение объектов, так что он создает только столько объектов «ItemRenderer», сколько необходимо для отображения элементов списка **, которые в настоящее время отображаются **. Когда вы прокручиваете список, он будет повторно использовать существующие средства визуализации элементов, а не создавать новые. Для этого средство визуализации элементов определяет свойство 'data'. Поэтому в контексте средства рендеринга элементов текущий элемент в поставщике данных может ссылаться на это свойство 'data'. –

+0

Примечание. Я упомянул выше о компоненте «Список», но то же самое относится к компонентам сетки данных (сетки расширяют «Список»). Кроме того, я ссылался на класс «ItemRenderer», который существует в Flex 4, в Flex 3 многие компоненты реализуют интерфейс «IDataRenderer» (не было официального класса ItemRenderer). –

+0

Привет, вы можете использовать компонент ItemRenderer [link] https://blogs.adobe.com/aharui/2008/08/datagrid_itemeditor_with_two_i.html). Но сначала, чтобы решить вашу проблему, я бы использовал класс, например «adrObject», который будет иметь функцию getter, называемую g_coordX, примерно так: –

ответ

1

Класс:

package 
{ 
    public class AdrObject 
    { 
     public var id:Number; 
     public var natureVoie:Number; 
     public var numeroVoie:Number; 
     public var nomVoie:Number; 
     public var commune:Number; 
     public var complementAdresse:String; 
     public var codePostal:String; 
     public var internalObj:Object; //or may be other, such as InternalAdrObject type 

     public function AdrObject() 
     { 
     } 

     public function get g_coordX():Number{ 
      return internalObj.coordX; 
     } 
    } 
} 

MXML:

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()"> 
    <mx:Script> 
     <![CDATA[ 
      import mx.collections.ArrayCollection; 
      [Bindable] 
      [ArrayElementType("AdrObject")] 
      public var adrDataList:ArrayCollection = new ArrayCollection(); 
      [Bindable] 
      public var obj:Object = new Object(); 

      public function init():void{ 
       var obj1:AdrObject = new AdrObject(); 
       var obj2:Object = new Object(); 
       obj1.id = null; 
       obj1.natureVoie = null; 
       obj1.numeroVoie = null; 
       obj1.nomVoie = null; 
       obj1.commune = null; 
       obj1.complementAdresse = null; 
       obj1.codePostal = null; 
       obj2.index = 1;   
       obj2.statutGeocodage = 123; 
       obj2.coordX = "484646868" 
       obj2.coordY = "455446846"      
       obj1.internalObj = obj2; 
       adrDataList.addItem(obj1); 
      } 

     ]]> 
    </mx:Script> 

    <mx:DataGrid id="grid" width="100%" height="100%" dataProvider="{adrDataList}"> 
     <mx:columns> 
      <mx:DataGridColumn dataField="g_coordX"/>  
     </mx:columns> 
    </mx:DataGrid> 
</mx:Application> 
+0

Теперь я понял, ваш второй фрагмент кода был очень полезным, Благодарю вас: D –

0

ли вы имеете в виду {data.coordX} частей? «obj» - это данные , привязанные к этому свойству. Obj имеет это свойство собственного "coordX", доступ к которому с data.coordX

[Bindable] 
public var obj:Object = new Object(); 

См DataBinding on Flex3 help

+0

еще нет получив его, он поместил строку в adrDataList, затем он запустил строку в obj, а затем поместил obj внутри adrDataList. Затем adrDataList переименовывается в данные, я не прав –

Смежные вопросы