FLEX 구매대행 요금 계산기
Programming 2007/01/11 09:391. Validator
Validator 를 이용하면 쉽게 입력된 값들을 확인할 수 있었습니다. 게다가 에러 표시까지 알아서..
# Definition of NumberValidator from Adobe LivedocValidate 해야할 필드들이 여러개였기 때문에, 아래와 같은 식으로 활용했습니다. 원래는 Validator 에 'source' 항목에 확인할 필드의 id 를 적어주고, `validator_id.validate()` 식으로 호출하면 됩니다.
<mx:NumberValidator
allowNegative="true|false"
decimalPointCountError="The decimal separator can only occur once."
decimalSeparator="."
domain="real|int"
exceedsMaxError="The number entered is too large."
integerError="The number must be an integer."
invalidCharError="The input contains invalid characters."
invalidFormatCharsError="One of the formatting parameters is invalid."
lowerThanMinError="The number entered is too small."
maxValue="NaN"
minValue="NaN"
negativeError="The number may not be negative."
precision="-1"
precisionError="The number entered has too many digits beyond the decimal point."
separationError="The thousands separator must be followed by three digits."
thousandsSeparator=","
/>
# Custom NumberValidator
<mx:NumberValidator id="numVal" property="text"
allowNegative="false" domain="real"
decimalPointCountError="입력형식을 살펴주십시오."
decimalSeparator="."
exceedsMaxError="입력값이 너무 큽니다."
invalidCharError="입력형식을 살펴주십시오."
lowerThanMinError="입력값이 너무 작습니다."
maxValue="NaN"
minValue="0"
negativeError="0보다 작은 수는 입력하실 수 없습니다."
precision="2"
precisionError="소수점 아래로는 두자리까지만 쓰실 수 있습니다."
requiredFieldError="필수입력 항목입니다."
separationError="입력형식을 살펴주십시오." />
import mx.events.ValidationResultEvent;
private var vResult:ValidationResultEvent;
public function validateNumFields() : Boolean
{
var listeners:Array = [exchangeRate, itemPrice, itemGroundFee, itemWeight];
var isValid:Boolean = true;
for each (var listener:Object in listeners)
{
numVal.listener = listener;
vResult = numVal.validate(listener.text);
if (vResult.type == ValidationResultEvent.INVALID)
{
isValid = false;
}
}
return isValid;
}
2. Trap TextInput
Validator 를 알기전에, 텍스트박스에 숫자 대신 다른 문자를 입력하는 것을 막기 위해서 키 입력을 가로채고자 했습니다. 처음에는 KEY_DOWN 이벤트를 사용하려고 했는데, 이벤트를 Cancel 하는 것이 불가능하더군요. 그래서 TEXT_INPUT 이벤트를 이용하여야 했습니다. Event 객체의 preventDefault 메쏘드는 원래 실행되어야 하는 이벤트를 막는 역할을 하며, Event 의 읽기 가능 옵션인 cancelable 이 true 일 때만 동작합니다.
public function trapTextInput( event:TextEvent ) : void대신 KEY_DOWN 으로는 텍스트 박스에서 엔터를 눌렀을 경우를 처리할 수 있더군요.
{
if ((event.text < '0' || event.text > '9') && event.text != '.')
{
event.preventDefault();
}
}
public function keyListener( event:KeyboardEvent ) : void
{
if (event.keyCode == 13)
{
estimateDeliveryFee();
}
}
3. Formatter
# Definition of CurrencyFormatter from Adobe Livedoc요런 CurrencyFormatter 를 가지고 Text 박스에 숫자를 입력할때,
<mx:CurrencyFormatter
alignSymbol="left|right"
currencySymbol="$"
decimalSeparatorFrom="."
decimalSeparatorTo="."
precision="-1"
rounding="none|up|down|nearest"
thousandsSeparatorFrom=","
thousandsSeparatorTo=","
useNegativeSign="true|false"
useThousandsSeparator="true|false"
/>
# Custom CurrencyFormatter
<mx:CurrencyFormatter id="WonPrice" precision="0"
rounding="up"
decimalSeparatorTo="."
thousandsSeparatorTo=","
useThousandsSeparator="true"
useNegativeSign="true"
currencySymbol=" 원"
alignSymbol="right"/>
textTotalWon.text = WonPrice.format(totalprice.toString());와 같이 입력하면 됩니다.
4. XML 파일 읽기
XML 파일 읽고 사용하기는 어렵지 않더군요. 차이점이라면, 로컬에 있는 자료를 읽는 것도 비동기방식으로 처리된다는 것 정도?
var myXML:XML = new XML();
var XML_URL:String = "config.xml";
var myXMLURL:URLRequest = new URLRequest(XML_URL);
var myLoader:URLLoader;
myLoader = new URLLoader(myXMLURL);
myLoader.addEventListener("complete", xmlLoaded);
public function xmlLoaded(evtObj:Event):void
{
myXML = XML(myLoader.data);
exchangeRate.text = myXML.exchangeRate;
}
FLEX 의 장점은 뭐니뭐니 해도, 저같이 디자인에 0점인 사람도 Flash UI 를 깔끔하게 만들 수 있다는게 아닐까요. Flex Builder Project 를 첨부합니다.
'Programming' 카테고리의 다른 글
| Markdown 을 소개합니다. (0) | 2007/01/17 |
|---|---|
| FLEX 구매대행 요금 계산기 (3) | 2007/01/11 |
| Flex Gnuboard Frontend (0) | 2007/01/09 |
| Extending Symfony Adjacent List (0) | 2007/01/08 |
| Symfony Adjacent List (0) | 2007/01/03 |
| AJAX Post-It 만들기 (1) | 2006/12/29 |

EstimateDeliveryFee.zip
amfphp.tar.gz