이 항목의 렌더러에 좋지 않은 시간을 보내고 있습니다. HTTP 서비스로 수집 할 일부 데이터를 표시하는 데 사용하는 MX DataGrid가 있습니다. 나는 일부 데이터를 첫 번째 열의 "미리보기"로 표시하고 DataGridColum.itemRenderer 속성과 함께 itemRenderer를 추가하려고했습니다. 여기있는 모든 것이 잘 작동합니다.스크롤 할 때 itemRenderer가 MX DataGrid의 행에서 변경 중입니다.
:<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>
내가 위에서 당신과 함께 공유 코드이 생성되어 내 코드입니다
그래서, 여기 내 문제는 내가 DataGrid를 아래로 스크롤하면, 나는 [미리보기]를 얻는 것은 다음과 같이 변경 : 그것은 스크롤하기 전에처럼
첫 번째 열입니다 변경하는 유일한 값이 모든 것이.
왜 이런 일이 발생합니까? 죄송합니다. 충분한 세부 정보를 작성하지 않았다면 충분하다고 생각합니다.하지만 더 자세한 정보가 필요한지 저에게 묻습니다.
미리 감사드립니다.
가 네, 괜찮 OK의 경우
이 말해. 이제는 스크롤을 할 때 itemRenderer를 다시 렌더링하기 때문에 itemRenderer를 다시 렌더링하지 않으려는 속성이 있습니까? @ joe-taras – mariomenjr
안녕하세요, 올바르게 바인딩하면 데이터 객체의 메모리에 변경 사항이 남아 있습니다 (DataGrid의 dataProvider와 연결됨). 최악의 경우 행을 벗어날 때 행을 저장할 수 있지만 문제없이 변경 사항을 적용 할 수 있다고 생각합니다. –