Sencha Touch 2.0 Controller refs属性不起作用?

时间:2012-03-08 16:21:04

标签: model-view-controller sencha-touch sencha-touch-2

我想知道Sencha Touch类'Ext.app.Controller'的'refs'属性。 我看了一个视频教程,其中构建了一个简单的contactForm。不,我试图为我的应用程序构建一个联系表单,我收到一个错误:'未捕获的TypeError:对象[对象对象]没有方法'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”方法会因为“contactForm”的“ref”属性而被创建,但事实并非如此。我在这里做错了什么?...感谢您的帮助!

3 个答案:

答案 0 :(得分:2)

refs属性属性已从Sencha Touch 2.0开发人员预览版更改为beta / final版。所以,你所写的内容对于开发预览是正确的,但目前它只是命名值对。对于你的情况:

refs: {
   contactForm: '#contactForm'
}

答案 1 :(得分:1)

我同意jeremygerrits,我不能确定这是定义引用的正确语法。

基于documentation,我宁愿这样做:

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

答案 2 :(得分:0)

看起来好像你的配置错误了。这是一个简单的控制器:

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

mainpanelxtype或可能是css选择器,而main会像getMain()那样为您提供视频中所谈到的内容。