Атрибут refs контроллера Sencha Touch 2.0 не работает?

Мне интересно узнать об атрибуте refs класса Sencha Touch «Ext.app.Controller». Я видел видеоурок, в котором была построена простая контактная форма. Нет, я пытался создать контактную форму для своего приложения и получаю сообщение об ошибке: «Uncaught TypeError: Object [object Object] не имеет метода getContactForm».

вот мой контроллер

Ext.define('MyFirstApp.controller.Main', {
extend: 'Ext.app.Controller', 
views: ['Viewport', 'Home'],

refs: [
     {
         ref: 'contactForm',
         selector: '#contactForm'
     }
],

init: function() {
    this.control({
        'button[action=submitContact]': {
            tap: 'submitContactForm'
        }
    });
},

submitContactForm: function() {
    var form = this.getContactForm();
    form.submit({
        url: 'contact.php'
    });
}

});

Я предполагаю, что что-то не так с «refs», в видео этот парень сказал, что метод «getContactForm» будет создан из-за атрибута «ref» в «contactForm», но это не так. Что я здесь делаю не так?.. Спасибо за помощь!


person Phil    schedule 08.03.2012    source источник


Ответы (3)


Похоже, у вас неправильно настроены ссылки. Вот простой контроллер:

Ext.define('App.controller.Main', {
  extend: 'Ext.app.Controller',
  config: {
    refs: {
      main: 'mainpanel'
    }
  }
});

mainpanel — это xtype или может быть селектором CSS, а main даст вам getMain(), как то, о чем говорилось в видео.

person jeremygerrits    schedule 08.03.2012

Свойство атрибута refs изменилось с предварительной версии Sencha Touch 2.0 для разработчиков на бета-версию/финальную версию. Итак, то, что вы написали, было правильным для предварительного просмотра, но в настоящее время это просто пара «имя-значение». Для вашего случая:

refs: {
   contactForm: '#contactForm'
}
person Swar    schedule 09.03.2012

Я согласен с jeremygerrits, я не уверен, что это правильный синтаксис для определения ссылок.

На основе документации , я бы предпочел сделать это так:

Ext.define('MyFirstApp.controller.Main', {
    extend: 'Ext.app.Controller', 

    views: ['Viewport', 'Home'],

    config: {
        refs: {
            contactForm: '#contactForm'
        }
    }

    init: function() {
        this.control({
            'button[action=submitContact]': {
                tap: 'submitContactForm'
            }
        });
    },

    submitContactForm: function() {
        var form = this.getContactForm();
        form.submit({
            url: 'contact.php'
        });
    }
});

См. также: http://docs.sencha.com/touch/2-0/#!/guide/controllers

person badsyntax    schedule 08.03.2012