Sencha touch 2 使用numberfield时,0值将在序列开始时删除

Sencha touch 2 使用numberfield时,0值将在序列开始时删除,sencha-touch-2,phone-number,Sencha Touch 2,Phone Number,我有一个数字字段,如下所示 { xtype: 'numberfield', name: 'phoneNumber', label: 'Phonenumber', required: false } 当用户插入3832这样的值时,它将被正确保存,但当用户在0123这样的序列开始

我有一个数字字段,如下所示

               {
                    xtype: 'numberfield',
                    name: 'phoneNumber',
                    label: 'Phonenumber',
                    required: false
                }
当用户插入3832这样的值时,它将被正确保存,但当用户在0123这样的序列开始处设置值为0时,零将被删除,只保存123

在我的例子中,我想存储一些电话号码,它们在开始时的值为0

另外,模型中的电话号码是一个字符串,因此它将保存为字符串

{ name: 'phoneNumber', type: 'string' }
我如何解决这个问题


提前谢谢。

我已经解决了你的问题。像这样使用你的模型。也可以使用文本字段代替数字字段

             {
                xtype: 'textfield',
                name: 'phoneNumber',
                label: 'Phonenumber',
                required: false
            }
mymodel.js

        Ext.define("Stackoverflow.model.mymodel", {
            extend: "Ext.data.Model",
            config: {

                fields: [
                    { name: 'phoneNumber', type: 'string' },

                ],
                validations: [

                    { type: 'presence', field: 'phoneNumber', message: 'Enter a Phone number.' },
                    { type: 'format', field: 'phoneNumber', matcher: /[0-9]{1,20}/}

                ]
            }
        });

然后在你的控制器内进行验证。我希望你有模型验证的代码。(如果没有留下评论)

我已经解决了你的问题。像这样使用你的模型。也可以使用文本字段代替数字字段

             {
                xtype: 'textfield',
                name: 'phoneNumber',
                label: 'Phonenumber',
                required: false
            }
mymodel.js

        Ext.define("Stackoverflow.model.mymodel", {
            extend: "Ext.data.Model",
            config: {

                fields: [
                    { name: 'phoneNumber', type: 'string' },

                ],
                validations: [

                    { type: 'presence', field: 'phoneNumber', message: 'Enter a Phone number.' },
                    { type: 'format', field: 'phoneNumber', matcher: /[0-9]{1,20}/}

                ]
            }
        });

然后在你的控制器内进行验证。我希望您有用于模型验证的代码。(如果没有留下注释)

您应该使用
textfield
并在控制器中检查
Ext.isNumeric(phoneNumberValue)
您应该使用
textfield
并在控制器中检查
Ext.isNumeric(phoneNumberValue)

当您的电话号码被保存为字符串时,为什么不使用一个文本字段呢?因为接下来我必须进行验证,以检查用户添加的值是否有效(一个数字而不是字母)。在第一种情况下,我使用了一个文本字段,但无法正确地进行验证。这是我的验证:{type:'format',field:'username',matcher:/[0-9]{0,20}/}该字段不应该是必需的,只允许数字。数值不能超过20个字符。数字字段是用来输入数字的,不是吗?但前导零对数字没有意义,除非它们是用来指定基数的,就像在许多编程语言中,以0开头的数字文字意味着它应该是八进制数。因此,在解析数字时,前导零会被丢弃[或者为解析设置基础,不知道sencha],而得到的是数字,因此无法重构前面的零的数量。电话号码不是数字,而是字符串,你应该这样对待它们,使用文本字段。谢谢你的回复。当我使用文本字段而不是数字字段时,我的验证应该是什么样子?这一个不起作用:{type:'format',field:'telefoonNummer',matcher:/[0-9]{0,20}/}为什么不使用一个TextField,因为你的电话号码被保存为字符串?因为我必须进行验证,以检查用户添加的值是否有效(一个数字而不是字母)。在第一种情况下,我使用了一个文本字段,但无法正确地进行验证。这是我的验证:{type:'format',field:'username',matcher:/[0-9]{0,20}/}该字段不应该是必需的,只允许数字。数值不能超过20个字符。数字字段是用来输入数字的,不是吗?但前导零对数字没有意义,除非它们是用来指定基数的,就像在许多编程语言中,以0开头的数字文字意味着它应该是八进制数。因此,在解析数字时,前导零会被丢弃[或者为解析设置基础,不知道sencha],而得到的是数字,因此无法重构前面的零的数量。电话号码不是数字,而是字符串,你应该这样对待它们,使用文本字段。谢谢你的回复。当我使用文本字段而不是数字字段时,我的验证应该是什么样子?这个不起作用:{type:'format',field:'telefoonNummer',matcher:/[0-9]{0,20}/}谢谢您的回复!在mymodel.js中,phoneNumber字段是必需的,但在我的例子中,它不应该是必需的。这是一个可选字段,因此我认为应该删除状态类型,但匹配器应该如何实现这一点?@StackFlower是的,如果可选,您可以从模型中删除类型:“状态”。您在实现上述代码时是否遇到任何错误?当我进行以下验证时,该字段是必需的,因为{1,20}{type:'format',field:'phoneNumber',matcher:/[0-9]{1,20}/},如果我将该1更改为如下0:{type:'format',field:'phoneNumber',matcher:/[0-9]{0,20}/}那么验证就不起作用了。它现在也接受信件,而不是只接受0-9个值感谢您的回复!在mymodel.js中,phoneNumber字段是必需的,但在我的例子中,它不应该是必需的。这是一个可选字段,因此我认为应该删除状态类型,但匹配器应该如何实现这一点?@StackFlower是的,如果可选,您可以从模型中删除类型:“状态”。您在实现上述代码时是否遇到任何错误?当我进行以下验证时,该字段是必需的,因为{1,20}{type:'format',field:'phoneNumber',matcher:/[0-9]{1,20}/},如果我将该1更改为如下0:{type:'format',field:'phoneNumber',matcher:/[0-9]{0,20}/}那么验证就不起作用了。它现在也接受字母,而不是仅接受0-9个值