Reputation: 6466
I'm trying to get view by ref. inside a method defined in controller. I'm getting error which says
Object [object Object] has no method 'getUserForm'.
Here's my view and controller, I'll be happy if someone can help me..
Thanks in advance.
User Form
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'
}]
}]
}
});
User Controller
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();
}
});
Upvotes: 2
Views: 7639
Reputation: 1993
refs - a collection of named ComponentQuery selectors that makes it easy to get references to key Components on your page.
According to http://docs.sencha.com/touch/2-0/#!/api/Ext.ComponentQuery (it is about types of selectors that you can use in "refs") components can be retrieved by using:
1) their xtype: 'panel', 'textfield' etc.
2) their id: '#idOfYourComponent'
In you case:
1) User Form
Ext.define(appName + '.view.user.UserForm', { extend : 'Ext.form.FieldSet', xtype : 'userForm' alias : 'widget.userform',
User Controller
Ext.define(appName + '.controller.UserController', { extend : 'Ext.app.Controller', stores : [ 'Users' ], models : [ 'User' ], views : [ 'user.UserList', 'user.UserForm' ], refs : { mySuperMegaForm: 'userForm' }
2) User Form
Ext.define(appName + '.view.user.UserForm', { extend : 'Ext.form.FieldSet', id : 'userFormId' alias : 'widget.userform',
User Controller
Ext.define(appName + '.controller.UserController', { extend : 'Ext.app.Controller', stores : [ 'Users' ], models : [ 'User' ], views : [ 'user.UserList', 'user.UserForm' ], refs : { mySuperMegaForm: '#userFormId' }
Upvotes: 2