MXML에서 이동하고 ActionScript 내에 사용자 지정 구성 요소 컨트롤을 빌드했습니다.사용자 지정 복합 컨트롤이 VGROUP에 다시 추가 된 후 0.5-1 초 동안 올바르게 렌더링되지 않습니다.
컨트롤이 올바르게 표시됩니다. 문제는 표시 목록에서 제거하고 .addElement (control) 메서드를 사용하여 다시 추가 한 후에 발생합니다.
다음은 다시 다시 추가하는 코드입니다.
private function displayParameters(parameters:ArrayCollection):void{
for(var index:int = 0; index<parameters.length; index++){
if(parameters[index] is ReportControl){
var control:ReportControl = parameters[index] as ReportControl;
control.percentWidth = 100;
vgParameters.addElement(control);
}
}
}
ReportControl
comboBoxMultiSelect
기본 클래스이다.
ReportControl
에 대한 그래픽 특수 문자는 없으며 구체적인 구현 (다형성)을위한 프로그래밍 인터페이스 역할을합니다.
public class comboBoxMultiSelect extends ReportControl{
[Embed("../Assets/Icons/plus-16.png")]
private var plusIcon:Class;
[Embed("../Assets/Icons/minus-16.png")]
private var minusIcon:Class;
private var expanded:Boolean = false;
private var buttonIconChanged:Boolean = false;
private var _drp:ComboBox;
private var _btnMultiple:Button;
private var _horizontalGroup:HGroup;
private var _multiSelector:ReportGridSelector;
private var _multiSelection:Boolean = true;
private var bMultiSelectionChanged:Boolean = false;
public function ToggleExpanded():void{
expanded = !_expanded;
buttonIconChanged = true;
invalidateSize();
invalidateProperties();
invalidateDisplayList();
}
public function comboBoxMultiSelect(){
super();
}
override protected function createChildren():void{
super.createChildren();
if(!_horizontalGroup){
_horizontalGroup = new HGroup();
_horizontalGroup.gap = 0;
_horizontalGroup.percentWidth = 100;
_horizontalGroup.height = ReportControl.SIZE_DEFAULT_HEIGHT;
addChild(_horizontalGroup);
}
if(!_drp){
_drp = new ComboBox();
_drp.text = GuiText;
_drp.percentWidth = 100;
_drp.height = ReportControl.SIZE_DEFAULT_HEIGHT;
_horizontalGroup.addElement(_drp);
}
if(!_btnMultiple && _multiSelection){
_btnMultiple = new Button;
_btnMultiple.setStyle("icon", plusIcon);
_btnMultiple.width = 20;
_btnMultiple.height = ReportControl.SIZE_DEFAULT_HEIGHT;
_btnMultiple.visible = true;
_btnMultiple.addEventListener(MouseEvent.CLICK,
function(event:MouseEvent):void{
ToggleExpanded();
});
_horizontalGroup.addElement(_btnMultiple);
}
}
override protected function commitProperties():void{
super.commitProperties();
if(buttonIconChanged){
if(_expanded==true){
_btnMultiple.setStyle("icon", minusIcon);
}
else{
_btnMultiple.setStyle("icon", plusIcon);
}
buttonIconChanged = false;
}
}
override protected function updateDisplayList(unscaledWidth:Number,
unscaledHeight:Number):void{
super.updateDisplayList(unscaledWidth, unscaledHeight);
_horizontalGroup.width = unscaledWidth;
_horizontalGroup.height = unscaledHeight;
}
override protected function measure():void{
super.measure();
measuredMinWidth = measuredWidth = ReportControl.SIZE_DEFAULT_WIDTH;
//minimum size //default size
if(_expanded==true)
measuredMinHeight= measuredHeight = 200;
else
measuredMinHeight= measuredHeight =
ReportControl.SIZE_DEFAULT_HEIGHT;
}
}
내가 vgParameters.addElement(control)
을 사용하여 다시 컨트롤을 추가
comboBoxMultiSelect
가 제대로 렌더링되지 않습니다. 버튼
_btnMultiple
안에있는
plusIcon
은 처음에는 올바르게 포지셔닝되지 않았지만 나중에 0.5-1 초 후에 자동으로 바로 정정됩니다.
나는 comboBoxMultiSelect 내에 문제가 있음을 확신하지만 아이콘을 강제로 같은 위치에 두는 방법을 확신하지 못합니다.
내 열심히 노력한 결과 매우 귀찮았습니다. 내가 뭘 잘못하고 있는지에 대한 아이디어가있는 사람이 있습니까?
감사합니다 :)
UPDATE -----> 여기에 띄는
[Event (name= "controlChanged", type="Reporting.ReportControls.ReportControlEvent")]
[Event (name= "controlIsNowValid", type="Reporting.ReportControls.ReportControlEvent")]
public class ReportControl extends UIComponent
{
private var _guiText:String;
private var _amfPHPArgumentName:String;
private var _reportResult:ReportResult;
private var _sequence:int;
private var _reportId:int;
private var _controlConfiguration:ReportParameterVO;
private var _isValid:Boolean = false;
internal var _selection:Object;
/**
* SIZE_DEFAULT_HEIGHT = 22
*/
internal static const SIZE_DEFAULT_HEIGHT:int = 22;
/**
* SIZE_DEFAULT_WIDTH = 150
*/
internal static const SIZE_DEFAULT_WIDTH:int = 150;
public function get ControlConfiguration():ReportParameterVO{
return _controlConfiguration;
}
public function set ControlConfiguration(value:ReportParameterVO):void{
_controlConfiguration = value;
_guiText = (value ? value.GuiText:"");
_amfPHPArgumentName = (value ? value.AMFPHP_ArgumentName: "");
_sequence = (value ? value.Sequence : null);
_reportId = (value ? value.ReportId : null);
}
public function get IsValid():Boolean{
return _isValid;
}
public function get ReportID():int{
return _reportId;
}
public function get Sequence():int{
return _sequence;
}
public function get ControlRepResult():ReportResult{
return _reportResult;
}
public function set ControlRepResult(value:ReportResult):void{
_reportResult = value;
}
internal function set Selection(value:Object):void{
_selection = value;
}
internal function get Selection():Object{
return _selection;
}
public function get ParameterSelection():Object{
return _selection;
}
public function get GuiText():String{
return _guiText;
}
public function get AmfPHPArgumentName():String{
return _amfPHPArgumentName;
}
public function ReportControl(){
//TODO: implement function
super();
}
public function dispatchControlChanged():void{
this.dispatchEvent(new ReportControlEvent(ReportControlEvent.CONTROL_CHANGED, this, true));
}
public function dispatchControlIsNowValid():void{
this.dispatchEvent(new ReportControlEvent(ReportControlEvent.CONTROL_IS_NOW_VALID, this, true));
}
public function addSelfToValueObject(valueObject:Object):Object{
valueObject[AmfPHPArgumentName] = _selection;
return valueObject;
}
}
"왜 천천히 MXML에서 벗어나고 있습니까?" 이 간단한 복합 클래스를 만드는 데 몇 시간이 걸렸을 것입니다. MXML로 작성한 경우 몇 분이 걸렸을 것이며 프레임 워크가 어려움을 처리하게 할 것입니다. 그것의 이득은 어디에 있습니까? 레이아웃 (mxml)을 비헤이비어 (as)와 분리하려는 경우 원한다면이를 수행하는 방법을 보여줄 수 있지만 질문에 대한 답변이되지는 않습니다. – RIAstar
우리는 미래에 필요할 수있는 'X'개의 제어 유형에 대한 추상화 형식이 필요했습니다. MXML을 사용하여 (분명히 더 빨랐을지라도) 어느 정도 제어 할 수 있었을 것이라고 생각했습니다. 또한 플렉스를 학습하고 있으므로 구성 요소 라이프 사이클을 뛰어 넘는 것보다 더 좋은 방법은 무엇입니까? – DynaWeb
구성 요소 수명주기를 배우는 것이 하나의 추상입니다. 이 컨텍스트에서 추상화가 의미하는 바를 정확히 이해하지는 않지만 다양한 형태 (스킨)를 취할 수있는 하나의 호스트 구성 요소를 작성할 수있는 Spark 스키닝 아키텍처를 살펴보아야합니다. 다음은이 개념에 대한 아주 간단한 예제 인 내 대답입니다. http://stackoverflow.com/questions/9930740/what-is-the-hostcomponent/9931286#9931286. (불행하게도 그것은 매우 간단하여 아무런 행동도하지 않습니다.) 대부분의 Spark 구성 요소는이 개념으로 구성됩니다. – RIAstar