2016-09-12 3 views
1

このアイテムのレンダラーに時間がありません。 HTTPサービスで収集しているデータを表示するために使用しているMX DataGridがあります。私はいくつかのデータを最初の列に "プレビュー"として表示し、DataGridColum.itemRendererプロパティを持つitemRendererを追加したかったのです。ここにあるものはすべて正常に動作します。スクロールするときにitemRendererがMXデータグリッドの行で変更されています

this is what I am expecting

<mx:DataGrid id="labelsGrid" width="100%" height="100%" visible="false" 
variableRowHeight="true" sortableColumns="false"> 
    <mx:columns> 
     <mx:DataGridColumn headerText="Preview" dataField="recordid" 
     width="{ preview_column_width }" itemRenderer="us.lbs.itemRenderers.preview"/> 

     <mx:DataGridColumn headerText="Design id" dataField="label_id" /> 

     <mx:DataGridColumn headerText="Font size" dataField="label_minheight"/> 

     <mx:DataGridColumn headerText="Width" dataField="label_width"/> 

     <mx:DataGridColumn headerText="Height" dataField="label_height"/> 

     <mx:DataGridColumn headerText="Label P/N" dataField="label_pn"/> 

     <mx:DataGridColumn headerText="Font type" dataField="label_fonttype"/> 

     <mx:DataGridColumn headerText="Qty" dataField="label_qty"/> 
    </mx:columns> 
</mx:DataGrid> 

、ここでは(良い)のitemRenderer

<?xml version="1.0" encoding="utf-8"?> 
<mx:HBox xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:s="library://ns.adobe.com/flex/spark" 
    xmlns:mx="library://ns.adobe.com/flex/mx" 
    width="100%" height="100%" 
    horizontalAlign="center" verticalAlign="middle" creationComplete="init()"> 
<fx:Style> 
    @namespace mx "library://ns.adobe.com/flex/mx"; 
    @namespace s "library://ns.adobe.com/flex/spark"; 
</fx:Style> 
<fx:Script> 
    <![CDATA[ 
     import aw.utils.StringUtils; 

     import flashx.textLayout.edit.SelectionFormat; 
     import flashx.textLayout.formats.TextLayoutFormat; 

     import mx.binding.utils.BindingUtils; 
     import mx.binding.utils.ChangeWatcher; 
     import mx.controls.Alert; 
     import mx.events.CloseEvent; 
     import mx.events.FlexEvent; 
     import mx.events.ModuleEvent; 
     import mx.geom.RoundedRectangle; 
     import mx.managers.PopUpManager; 
     import mx.messaging.messages.IMessage; 
     import mx.rpc.events.FaultEvent; 
     import mx.rpc.events.ResultEvent; 
     import mx.utils.ColorUtil; 
     import mx.utils.ObjectUtil; 
     import mx.utils.StringUtil; 

     import spark.components.Application; 

     import us.lbs.viewer; 

        public var dad:viewer = null; 
        public var zoom:int = 2; 

        public var px_in:Number = 96; 
        public var pt_px:Number = 1.333333333333333; 

     [Bindable]public var var_width:Number = 0; 
     [Bindable]public var var_height:Number = 0; 
     [Bindable]public var var_font_size:Number = 12; 
     [Bindable]public var tmp_lines:String = ""; 

     public function init():void { 
      settingDad(); setSize(); setFontSize(); fixLines(); 
     } 

     protected function settingDad():void { 
      dad = this.parentDocument as viewer; 
      if (typeof(dad.previewers[ data.label_id ]) != 'object') { 
       dad.previewers[ data.label_id ] = {}; 
       dad.previewers[ data.label_id ].preview = this; 

       /*Alert.show( 
        this.data.label_id + "\n" + 
        "Type: " + typeof(dad.previewers[ data.label_id ].preview), 
        this.data.rm_pn 
       );*/ 
      } 
     } 

     protected function setFontSize():void { 
      var_font_size = data.label_minheight * pt_px * zoom; 
      var_font_size = Math.round(var_font_size); 
     } 

     protected function setSize():void { 
      var_width = Number(data.label_width) * px_in * zoom; 
      var_height = Number(data.label_height) * px_in * zoom; 

      dad.labelsGrid.visible = true; 
      dad.preview_column_width = (var_width > dad.preview_column_width) ? var_width:dad.preview_column_width; 
     } 

     protected function fixLines():void { 
      tmp_lines = ""; var lines:Array = String(data.lines).split("//"); 
      for each (var line:String in lines) { 
       tmp_lines += StringUtils.trim(line) + "\n"; 
      } tmp_lines = StringUtils.trim(tmp_lines); 
     } 

    ]]> 
</fx:Script> 
<s:HGroup > 
    <s:RichEditableText 
     id="previewTxt" 
     backgroundColor="white" 
     text="{ tmp_lines }" 
     selectionHighlighting="always" editable="false" selectable="true" 
     width="{ var_width }" height="{ var_height }" 
     kerning="on" 
     fontSize="{ var_font_size }" fontFamily="{ data.label_fonttype }" 
     paddingTop="0" paddingBottom="0" paddingLeft="0" paddingRight="0" 
     textAlign="center" verticalAlign="middle" focusedTextSelectionColor="0xA8C6EE" 
     selectionChange="dad.previewTxtSelectionChange(event)" /> 
</s:HGroup> 

私は上記のあなたと共有コードは、これを生成しているため私のコードです

私の問題は、データグリッドを下にスクロールすると、私はプレビューを取得することは、このように、変更された:それは、スクロール前だったよう

the second preview gets changed

最初のカラムで変更されている唯一の値は、すべてがあります。

なぜこの問題が発生していますか? 申し訳ありませんが、十分な詳細を書いていない場合、これで十分だと思いますが、詳細が必要な場合は私に尋ねてください。

ありがとうございます!

答えて

2

レンダリングではバッファが使用されるため、プロパティとその変更を直接リンクする必要があります。

これを試してみてください:fixLines方法に

リンクテキストのプロパティを、プロパティtext<s:RichEditableText>プットに

に従うように、この:

text = "{fixLines(data)}" 

の変更次のようにあなたの方法:

protected function fixLines(obj:Object):String { 
    if (obj == null) return ""; 
    var currText = ""; 
    var lines:Array = String(obj.lines).split("//"); 
    for each (var line:String in lines) { 
     currText += StringUtils.trim(line) + "\n"; 
    } 
    currText = StringUtils.trim(tmp_lines); 
    return currText; 
} 

initメソッドでは、yo

public function init():void { 
    settingDad(); setSize(); setFontSize(); fixLines(data); 
} 

それは

+0

OKだ場合は、[はい、それはokです教えてください:uがfixLines、以下のように変更を呼び出します。今、スクロールしているときにスクロールしている間に、変更を保持し、それらを失わないようにする必要があります(itemRendererを再レンダリングするためitemRendererを再描画しないようにするプロパティがありますか? @ joe-taras – mariomenjr

+0

こんにちは、正しくバインドすると、変更はデータオブジェクトのメモリに残ります(DataGridのdataProviderにリンクされています)。最悪の場合、行から出るときに行を保存することはできますが、問題なく変更を加えることができると思います –

関連する問題