문제

양식이있는 MXML이 있고 그 안에는 두 개의 텍스트가 있습니다. 나는 mxml 파일 내부에 코드가있는 것이 싫어서 (나는 JavaScript Formation에서 나왔다)

mx:Script source="external.as"

MXML 파일에 사용 된 모든 코드를 포함하도록 태그. 문제는이 코드가있는 경우 external.as 파일:

private function populateFromForm():void{
   var vo:ValidObject= new ValidObject();
   vo.market = marketInput.text;
   vo.segment = segmentInput.text;
   vo.priceLow = priceLowInput.text;
   vo.priceHigh = priceHighInput.text;
}

MarketInput, segmentinput, pricelowinput 및 priceHighInput은 MXML 파일에 정의 된 텍스트입니다. 내가 준수하려고 할 때 나는 얻는다 1120 : 정의되지 않은 속성 XXXXX에 대한 액세스

기능 전에이 줄을 추가하려고 시도했습니다.

public var marketInput:TextInput;
public var segmentInput:TextInput;
public var priceLowInput:TextInput;
public var priceHighInput:TextInput;

그러나 대신 나는 얻는다 1151 : 네임 스페이스 내부의 정의 XXXX와의 충돌이 존재합니다. 완벽하게 이해됩니다.

함수에 대한 모든 입력 참조를 IT 매개 변수로 전달하지 않고도이를 수행하는 방법이 있습니까?

도움이 되었습니까?

해결책

"코드-홀드"를하는 것은 Flex에서 고통 스럽습니다. JavaScript에서와 같이 부분 클래스 또는 프로토 타입 상속의 유연성 개념은 없습니다. 많은 리소스에 대한 "Flex의 코드-비만"에 대한 Google.

MXML에 코드를 임베딩한다는 아이디어에 익숙해지는 것이 낫다고 생각합니다. 인라인 코드를 최대한 피하는 스크립트 태그를 사용하십시오. MXML 내에 많은 코드를 작성 해야하는 경우 코드를 여러 사용자 정의 구성 요소로 다시 얻을 수 있습니다. 재사용 가능한 경우 보너스 포인트.

다른 팁

TextInputs의 상위 컨테이너 인스턴스에 대한 참조를 작성한 다음 해당 참조를 사용하여 TextInputs 및 해당 속성을 사용합니다. 파일 구조에 대한 설명이 필요하다고 생각합니다. 상위 용기의 인스턴스를 어떻게 만들고 있습니까? 나는 이것이 당신이해야 할 일이라고 생각합니다.

myform.mxml :

<?xml version="1.0" encoding="utf-8"?>
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml">
    <mx:TextInput id="marketInput" />
    <mx:TextInput id="segmentInput" />
    <mx:TextInput id="priceLowInput" />
    <mx:TextInput id="priceHighInput" />
</mx:VBox>

savevocontainer.as :

package
{
    public class SaveVoContainer extends Container
    {
        private var myForm:MyForm = new MyForm();

        public function SaveVOContainer
        {
            this.addChild(myForm);
        }

        private function populateFromForm():void{
           var vo:ValidObject= new ValidObject();
           vo.market = myForm.marketInput.text;
           vo.segment = myForm.segmentInput.text;
           vo.priceLow = myForm.priceLowInput.text;
           vo.priceHigh = myForm.priceHighInput.text;
        }
    }
}

Flex에서 코드-비만을하는 표준 방법은 상속을 통한 것입니다. 다음은 문서의 좋은 설명입니다. http://learn.adobe.com/wiki/display/flex/code+behind. 간단히 말해서 :

  1. 기본 클래스로 사용하도록 ActionScript 클래스를 선언하십시오.
  2. 기본 클래스를 MXML 파일의 루트 컨테이너로 설정하십시오.
  3. MXML 파일에 선언 된 모든 컨트롤의 경우 정확히 동일한 이름을 사용하여 기본 클래스의 공개 멤버로 전환해야합니다 (소스 태그가있는 스크립트 블록에 대해 위에서 수행하는 것과 정확히 작동 :-)

따라서 귀하의 ActionScript 파일 :

package mypackage
{
    import mx.controls.TextInput;

    public class myClass extends WindowedApplication
    {
        public var marketInput:TextInput;

        private function populateFromForm():void{
            /* As above */
        }
    }
}

해당 MXML 파일 :

<?xml version="1.0" encoding="utf-8"?>
<custom:myClass xmlns:custom="mypackage.*"
        xmlns:fx="http://ns.adobe.com/mxml/2009"
        xmlns:s="library://ns.adobe.com/flex/spark" 
        xmlns:mx="library://ns.adobe.com/flex/mx">
    <mx:TextInput id="marketInput"/>
</custom:myClass>

다른 TextInput 컨트롤에 대한 et cetera. 그리고 이제 pupulatefromform 기능이 작동해야합니다.

동일한 엔티티를 두 번 소환 해야하는 것은 일종의 끔찍한 일이지만, 초기 응답자가 상처를 입은 것은 아닙니다.

  • 이것을 .as로 가져옵니다 :

    import mx.core.Application;

  • .

    mx.core.Application.application.component.property = value; mx.core.Application.application.myText.text = 'test';

MXML 파일에 ActionScript 파일을 가리키는 스크립트 태그가 있습니까?


<mx:Script source='includes/foo.as' />

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top