Sencha Touch 2 - 使用MVC获取表单值

时间:2013-11-18 20:30:26

标签: javascript extjs sencha-touch sencha-touch-2

我的问题与此帖Sencha Touch 2 - How to get form values?

中可能的答案有关

我在尝试使用Controller从视图中检索表单时遇到了同样的问题。

我当前的错误是未捕获的TypeError:对象#没有方法'getValues'

查看:

Ext.define("App.view.Login", {
extend: 'Ext.form.Panel',
requires: [
    'Ext.field.Password'
],
id: 'loginview',

config: {
    items: [{
        xtype: 'titlebar',
        title: 'Login',
        docked: 'top'
    },
    {
        xtype: 'fieldset',
        id: 'loginForm',
        defaults: {
            required: true
        },
        items: [{
            items: [{
                xtype: 'textfield',
                name: 'username',
                label: 'Username:'
            },
            {
                xtype: 'passwordfield',
                name: 'password',
                label: 'Password:'
            }]
        }]
    },
    {
        xtype: 'toolbar',
            layout: {
                pack: 'center'
            }, // layout
            ui: 'plain',
            items: [{
                xtype: 'button',
                text: 'Register',
                id: 'register',
                ui: 'action',
            }, {
                xtype: 'button',
                text: 'Login',
                id: 'login',
                ui: 'confirm',
            }] // items (toolbar)
    }]
}

});

控制器:

Ext.define('App.controller.Login', {
extend: 'Ext.app.Controller',

requires: [
    'App.view.Login',
    'Ext.MessageBox'
],

config: {
    refs: {
        loginForm: '#loginForm',
        register: '#register',
        login: '#login'
    },
    control: {
        register: {
            tap: 'loadRegisterView'
        },
        login: {
            tap: 'loginUser'
        }
    },

    history: null
},

loadRegisterView: function(btn, evt) {
    /*var firststep = Ext.create('App.view.Register');
    Ext.Viewport.setActiveItem(firststep);*/
},
loginUser: function(btn, evt) {
    var values = loginForm.getValues();
    console.log(values);
}

});

由于

编辑: 所以下面的代码可以工作,但不是我看到每个人都这样做。

var form = Ext.getCmp('loginview');

console.log(form.getValues());

其他人都这样做.getLoginView()。getValues(); 。我不明白“这个”是在错误的范围内,甚至会声明getLoginView?没有人将这些信息包含在他们的片段中。这是另一个例子Sencha Touch 2 - How to get form values?

1 个答案:

答案 0 :(得分:1)

在“id”下面的视图中添加xtype:

xtype: 'loginform',

然后用以下代码替换loginForm的引用:

loginForm: 'loginform',

您的代码将有效。你正在做的错误是你试图在'fieldset'中访问'formpanel'的方法。