통화나 단위에 따라 precision 정규식이 자동으로 적용되도록 커스텀 number field를 만들었다.
그리고 합계의 경우는 "(단가 × 수량) × 건수"로 구해지는데 이 값은 논리적으로 무한값이어야 한다.
왜냐하면 가로의 길이는 "단가 × 수량"이라는 한계값을 둘 수도 있으나, "건수"라는 세로의 높이는 얼마든지 늘어날수 있기 때문이다.
즉 가로의 폭은 임계치가 있다하더라도 세로로는 얼마든지 계속늘어날수 있는 면적이 곧 합계이므로
해당값은 논리적으로는 number가 표현할 수 있는 범위를 초과할수 있으므로 문자값으로 취급한다.
<dom-module id="cc-number-field">
<style>
:host {
display: flex;
width: 100%;
}
</style>
<template>
<sc-text-field id="elNumber"
value="{{value}}"
input-cover="true"
format-type="{{formatType}}"
placeholder$="[[placeholder]]"
class$="[[class]]"
required="{{required}}"
readonly="{{readonly}}"
input-clear="{{inputClear}}"
validator="onValidator">
</sc-text-field>
</template>
<script>
Polymer({
is : "cc-number-field",
properties : {
required : {
type : Object,
value : function() {
return false;
}
},
readonly : {
type : Object,
value : function() {
return true;
}
},
inputClear : {
type : Object,
value : function() {
return false;
}
},
formatType : {
type : Object,
value : function() {
return "";
}
},
unit : {
type : Object,
value : function() {
return {};
}
},
value : {
type : Object,
value : function() {
return {};
},
notify : true,
},
validator : {
type : Object,
value : function() {
return {};
}
},
},
observers : [
"_onChangeUnit(unit)"
],
_onChangeUnit : function(unit)
{
var me = this;
me.$.elNumber.regex = CCPrecManager.regex(me.formatType, me.unit);
// 기존값 있다면 다시 계산
if (UT.isNotEmpty(me.value))
{
me.value = CCPrecManager.format(me.formatType, me.value, me.unit);
}
},
onValidator : function(value)
{
var me = this;
if (UT.isFunction(me.domHost[me.validator]))
{
return me.domHost[me.validator].call(me.domHost, me.value);
}
return true;
},
});
</script>
</dom-module>
<cc-number-field value="{{app.amt}}" unit="{{app.cur}}" format-type="amt" placeholder="금액" class="align-right" required="[[formula('isEditable')]]" readonly="[[!formula('isEditable')]]"></cc-number-field>