Sencha Touch 2-无法从控制器获取参考视图

时间:2012-06-02 20:02:40

标签: sencha-touch-2

我正试图通过参考来查看。在控制器中定义的方法内部。我收到的错误是

  

Object [object Object]没有方法'getUserForm'。

这是我的观点和控制者,如果有人可以帮助我,我会很高兴。

提前致谢。

用户表单

Ext.define(appName + '.view.user.UserForm', {
    extend  : 'Ext.form.FieldSet',
    alias   : 'widget.userform',
    title   : 'User Form',
    instructions: 'Fill your personel information',
    iconCls : 'icon-form',
    fullscreen: true,
    config : {
        items : [{
            xtype       : 'toolbar',
            docked      : 'top',
            title       : 'Registeration Form',
            iconCls     : 'icon-form'
        }, {
            xtype       : 'textfield',
            label       : 'Name ',
            name        : 'name'            
        }, {
            xtype       : 'textfield',
            label       : 'Surname ',
            name        : 'surname'         
        }, {
            xtype       : 'passwordfield',
            label       : 'Password ',
            name        : 'password'
        }, {
            xtype       : 'toolbar',
            dock        : 'bottom',
            defaults    : {
                xtype   : 'button',
                flex    : 1
            },
            layout      : { pack : 'center' },
            items       : [{
                text    : 'Reset',
                iconCls : 'icon-refresh-32',
                ui      : 'action',
                action  : 'reset'
            }, {
                text    : 'Save',
                ui      : 'action',
                iconCls : 'icon-save-32',
                action  : 'save'
            }]
        }]
    }
});

用户控制器

Ext.define(appName + '.controller.UserController', {
    extend      : 'Ext.app.Controller',
    stores      : [ 'Users' ],
    models      : [ 'User' ],
    views       : [ 'user.UserList', 'user.UserForm' ],
    refs        : [{
        ref     : 'userList',
        selector: 'userlist'
    }, {
        ref     : 'userForm',
        selector: 'userform'
    }],
    init        : function() {
        this.control({
            'userform button[action=save]' : {
                release : this.saveUserForm
            },
            'userform button[action=reset]' : {
                release : this.resetUserForm
            }
        });
    },
    saveUserForm : function(btn) {
//      Ext.Msg.alert('SUCCESS', 'Form is successfully saved.');
        **var form = this.getUserForm();** // ERROR!
        alert(form);
//      Ext.Msg.alert('Form Values', JSON.stringify(form.getValues(), null, 2));
    },
    resetUserForm : function(btn) {
        **var form = this.getUserForm();** // ERROR!
//      var form = btn.up('form');
        form.reset();
    }
});

1 个答案:

答案 0 :(得分:2)

refs - 一组命名的ComponentQuery选择器,可以轻松获取对页面上关键组件的引用。

根据http://docs.sencha.com/touch/2-0/#!/api/Ext.ComponentQuery(它是关于你可以在“refs”中使用的选择器的类型),可以使用以下方法检索组件:

1)他们的 xtype :'panel','textfield'等。

2)他们的 id :'#idOfYourComponent'

在你的情况下:

1)用户表格

Ext.define(appName + '.view.user.UserForm', {
    extend  : 'Ext.form.FieldSet',
    xtype   : 'userForm' 
    alias   : 'widget.userform',

用户控制器

Ext.define(appName + '.controller.UserController', {
    extend      : 'Ext.app.Controller',
    stores      : [ 'Users' ],
    models      : [ 'User' ],
    views       : [ 'user.UserList', 'user.UserForm' ],
    refs        : {
        mySuperMegaForm: 'userForm'
    }

2)用户表格

Ext.define(appName + '.view.user.UserForm', {
    extend  : 'Ext.form.FieldSet',
    id   : 'userFormId' 
    alias   : 'widget.userform',

用户控制器

Ext.define(appName + '.controller.UserController', {
    extend      : 'Ext.app.Controller',
    stores      : [ 'Users' ],
    models      : [ 'User' ],
    views       : [ 'user.UserList', 'user.UserForm' ],
    refs        : {
        mySuperMegaForm: '#userFormId'
    }