我正在尝试为数字输入编写一个值转换器。在fromView()
中,它会删除无数字字符并返回已解析的值。在toView()
中,它使用aurelia-i18n
格式化值。此值转换器绑定到input type=text
字段。
fromView()
正常工作,如果以不同的顺序调用,toView()
似乎也应该正常工作。
这是我的价值转换器:
import {inject} from "aurelia-framework"
import {I18N, NfValueConverter} from "aurelia-i18n";
export class NumericValueConverter {
static inject = [I18N];
constructor(private i18N: I18N) {}
toView(value: any, elementId: any, config: any) {
let retval = "";
if (value) {
const nf = this.i18N.nf(undefined, "de");
retval = nf.format(value);
}
return retval;
}
fromView(value: any, elementId: any, config: any) {
let retval = "";
if (value) {
retval = Here_Goes_The_Logic_To_Strip_Non_NumericChar_And_Parse_ToNumber
}
return retval;
}
}
用法:
<input id="${someId}"
if.bind="someCondition"
type="text"
class="form-control"
value.bind="targetObj[objProp]| numeric:config"
readonly.bind="isreadonlyview">
来自toView()
的值永远不会反映在input
字段中。有什么建议吗?
到目前为止我的观察
toView()
之前调用fromView()
。但是,我认为如果订单不同,它可以工作。input
中的值会导致以下来电:toView()
,fromView()
,toView()
。因此,这是第一次有效,但不适用于随后的时间,因为电话就是这样:toView()
,fromView()
。toView()
并使用NfValueConverter
,附带aurelia-i18n
,但它也具有与此类似的效果。