«это» не решено правильно в обработчике отправки в Sencha touch / JavaScript - PullRequest
0 голосов
/ 16 января 2012

Я пытаюсь создать форму с помощью sencha touch, которая просто берет текст, который вводит пользователь, и выполняет поиск работы на веб-сайте.Хотя все остальное работает должным образом, включая кнопку сброса, но всякий раз, когда я делаю this.getComponent('keywords') в submitbuttonhandler, оно выдает мне сообщение о том, что Uncaught

TypeError: Object # не имеет метода getComponent.Ext.ns ( 'SearchJobsForm');// зарегистрируем наше пространство имен

var resetButtonHandler = function (btn, evt) {
this.getComponent('keywords').reset();
this.getComponent('dposted').reset();
this.getComponent('jtitle').reset();
this.getComponent('jcategory').reset();
this.getComponent('salaryf').reset();
this.getComponent('salaryt').reset();
this.getComponent('jscategory').reset();
this.getComponent('ptype').reset();
}

Вот блок кода, который является проблемой.Следующий блок кода не разрешает «это» так, как описан выше обработчик кнопки сброса.

        var submitButtonHandler = function(btn,evt) {
        var temp = this.getComponent('keywords').getValue();
        //query('#jcategory').getValue();
         alert(temp);
        //alert('In Progress');
        }

Ниже просто создается форма.

        SearchJobsForm.form = Ext.extend(Ext.Panel,{

            initComponent: function(){

                Ext.apply(this, {
                    floating: true,
                    width: 250,
                    height: 370,
                    scroll: 'vertical',
                    centered: true,
                    modal: true,
                    hideOnMaskTap: false,
                    items: [{  
                    xtype: 'textfield',
                    itemId: 'keywords',
                    label: 'Keywords',
                    labelAlign: 'top',
                    labelWidth: '100%',
                    name: 'Keywords'
                    },{  
                    xtype: 'textfield',
                    label: 'Job Title',
                    itemId: 'jtitle',
                    labelAlign: 'top',
                    labelWidth: '100%',
                    name: 'Job Title'
                    },{
                    xtype: 'selectfield',
                    label: 'Job Category',
                     itemId: 'jcategory',
                    labelAlign: 'top',
                    labelWidth: '100%',
                        options: [{
                            text: '-- ANY --', value: 'ANY'
                        }, {
                            text: 'Technical', value: 'Technical'
                        }, {
                            text: 'Non-Technical', value: 'Non-Technical'
                        }, {
                            text: 'Tech Start-up', value: 'Tech Start-up'
                        }, {
                            text: 'Life Science', value: 'Life Science'
                        }, {
                            text: 'Digital Media', value: 'Digital Media'
                        }, {
                            text: 'Accelerator Centre', value: 'Accelerator Centre'
                        }
                        ]
                    },{
                    xtype: 'selectfield',
                    label: 'Job Sub-Category',
                     itemId: 'jscategory',
                    labelAlign: 'top',
                    labelWidth: '100%',
                        options: [{
                            text: '-- ANY --', value: 'ANY'
                        }, {
                            text: 'Developer', value: 'Developer'
                        }, {
                            text: 'Quality Assurance', value: 'Quality Assurance'
                        }, {
                            text: 'Project Manager', value: 'Project Manager'
                        }, {
                            text: 'Tester', value: 'Tester'
                        }, {
                            text: 'IT Help Desk', value: 'IT Help Desk'
                        }, {
                            text: 'Health Care', value: 'Health Care'
                        }, {
                            text: 'Transportation and Logistics', value: 'Transportation and Logistics'
                        }, {
                            text: 'Management', value: 'Management'
                        }, {
                            text: 'Network', value: 'Network'
                        }, {
                            text: 'Administration', value: 'Administration'
                        }, {
                            text: 'General', value: 'General'
                        }
                        ]
                    },{
                    xtype: 'selectfield',
                    label: 'Position Type',
                     itemId: 'ptype',
                    labelAlign: 'top',
                    labelWidth: '100%',
                        options: [{
                            text: '-- ANY --', value: 'ANY'
                        }, {
                            text: 'Part Time', value: 'Part Time'
                        }, {
                            text: 'Part Time Contract', value: 'Part Time Contract'
                        }, {
                            text: 'Full Time', value: 'Full Time'
                        }, {
                            text: 'Full Time Contract', value: 'Full Time Contract'
                        }
                        ]
                    },{
                    xtype: 'selectfield',
                    label: 'Salary (CAD$): From',
                     itemId: 'salaryf',
                    labelAlign: 'top',
                    labelWidth: '100%',
                        options: [{
                            text: '-- ANY --', value: 'ANY'
                        }, {
                            text: '20000', value: '20000'
                        }, {
                            text: '30000', value: '30000'
                        }, {
                            text: '40000', value: '40000'
                        },{
                            text: '50000', value: '50000'
                        }, {
                            text: '60000', value: '60000'
                        }, {
                            text: '70000', value: '70000'
                        }, {
                            text: '80000', value: '80000'
                        }, {
                            text: '90000', value: '90000'
                        }, {
                            text: '100000', value: '100000'
                        }, {
                            text: '100000+', value: '100000+'
                        }

                        ]
                    },{
                    xtype: 'selectfield',
                    label: 'to',
                     itemId: 'salaryt',
                    labelAlign: 'top',
                    labelWidth: '100%',
                        options: [{
                            text: '-- ANY --', value: 'ANY'
                        }, {
                            text: '20000', value: '20000'
                        }, {
                            text: '30000', value: '30000'
                        }, {
                            text: '40000', value: '40000'
                        },{
                            text: '50000', value: '50000'
                        }, {
                            text: '60000', value: '60000'
                        }, {
                            text: '70000', value: '70000'
                        }, {
                            text: '80000', value: '80000'
                        }, {
                            text: '90000', value: '90000'
                        }, {
                            text: '100000', value: '100000'
                        }, {
                            text: '100000+', value: '100000+'
                        }
                        ]
                    },{
                    xtype: 'selectfield',
                    label: 'Posted in last (Days):',
                     itemId: 'dposted',
                    labelAlign: 'top',
                    labelWidth: '100%',
                        options: [{
                            text: '30', value: '30'
                        }, {
                            text: '60', value: '60'
                        }, {
                            text: '90', value: '90'
                        }
                        ]
                    }
                        ],
                        dockedItems: [{
                                        xtype: 'toolbar',
                                        itemId: 'toolbar',
                                        dock: 'bottom',
                                        height: '36',
                                        items: [
                                                { xtype: 'button', text: 'Reset',itemId: 'reset',scope: this,
                                                handler:  resetButtonHandler  },
                                                { xtype: 'spacer'},
                                                { xtype: 'button', text: 'Submit',
                                                handler: submitButtonHandler 
                                                }
                                                ]
                                    }]


                });


                SearchJobsForm.form.superclass.initComponent.call(this);

               // alert(SearchJobsForm.form.getValues(true));

                this.items.get(2).on({
                    change: this.onChange,
                    scope: this
                });



            },


            onChange: function(selectField, value){
                this.items.get(1).disable();
            } //end of function onChange

        });



        Ext.setup({
            tabletStartupScreen: 'tablet_startup.png',
            phoneStartupScreen: 'phone_startup.png',
            icon: 'icon.png',
            glossOnIcon: false,
            onReady: function(){

                var form = new SearchJobsForm.form();
                form.show();                

            }
        });

1 Ответ

1 голос
/ 16 января 2012

this.getComponent (childId) просматривает дочерние компоненты текущего объекта. В resetButtonHandler () это следует рассматривать как кнопку сброса.

SearchJobsForm - это объявление объекта, а не его экземпляра. В противном случае вы бы использовали «новую» команду. SearchJobsForm.fieldName не относится к полю.

Итак, в контексте метода submitButtonHandler (), это эквивалентно: Ext.getCmp ('reset');

Вы можете использовать поле id (не itemId) компонента для быстрого и грязного обращения к нему:

SearchJobsForm.form = Ext.extend (Ext.Panel, {

initComponent: function(){
  Ext.apply(this, {
    id: 'form', // add an id to use Ext.getCmp()            
    floating: true,
    ...
  }
});

// So later you can use 
Ext.getCmp('keywords') 

Или пройти весь путь вверх из контекста resetButton до панели формы, а затем вниз до ключевых слов ввода. Нет необходимости добавлять атрибут в этом случае.

var form = this.el.up('.x-panel');
var input_keyword = form.down('.x-input-text[name=Keywords]').getValue();

Привет

...