0

我是 Sencha ExtJS 的新手。我刚刚开始创建 MVC 应用程序。目前我正在尝试为该应用程序创建一个登录屏幕,但我无法从登录控制器获取对我的登录表单的引用。这是我的代码:

应用程序.js

Ext.application({
    name: 'Fleximanager',

    requires: [
    ],

    controllers: [
        'Login'
    ],

    autoCreateViewport: true,

    init: function() {
    }
});

视口.js

Ext.define('Fleximanager.view.Viewport', {
    extend: 'Ext.container.Viewport',
    requires:[
        'Fleximanager.view.login.Flexilogin'
    ],
    layout: 'fit',
    items: [{
        xtype:'flexilogin'
    }]
});

弹性登录.js

Ext.define('Fleximanager.view.login.Flexilogin', {
    extend: 'Ext.panel.Panel',
    xtype: 'flexilogin',

    layout: {
        type: 'vbox',
        align: 'center',
        pack: 'center'
    },

    id: 'flexilogin',
    style: {background: '#8fc33a'},
    items: [{
        xtype:'panel',
        title: 'Login',
        frame: true,
        width: 350,
        height: 200,
        layout: 'fit',
        items: {
            layout: 'anchor',
            id: 'flexiloginform',
            bodyPadding: 15,

            defaultType: 'textfield',
            items: [{
                fieldLabel: 'Username',
                name: 'username',
                allowBlank: false
            },{
                fieldLabel: 'Password',
                name: 'password',
                inputType: 'password',
                allowBlank: false
            }],
            buttons: [{
                text: 'Register',
                id: 'registerbtn',
                action: 'register'
            },{
                text: 'Login',
                id: 'loginbtn',
                formBind: true,
            }]
        }
    }]
});

和控制器的 Login.js

Ext.define('Fleximanager.controller.Login', {
    extend: 'Ext.app.Controller',
    requires: [
        'Fleximanager.view.login.Flexilogin',
    ],
    refs:[{
        ref: 'loginbtn',
        selector: '#loginbtn'
    }],

    init: function(){
        this.control({
            'loginbtn': {
                'click': function(){
                    console.log('click');
                }
            }
        })
    }
});

单击登录按钮后,该代码应该将“单击”记录到控制台,但它什么也不做。谁能帮我?

感谢您的任何回答。

4

2 回答 2

2

只需像这样为您的按钮命名,

{
      text: 'Login',
      id: 'loginbtn',
      formBind: true,
      name: 'login'
}

现在在控制器中,输入以下代码:

this.control({
            'button[name="login"]': {
                click: function(){
                    console.log('click');
                }
            }
        })

这将达到您的目的。

于 2013-10-30T14:01:47.750 回答
2

问题在于您如何引用按钮。

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

正在创建this.getLoginbtn要在控制器中使用的参考 getter 方法,但不能用于this.control

字符串 key inthis.control是一个标识符,如Ext.ComponentQuery.query. 它搜索 xtype/alias 和 itemId。

this.control({
    'flexilogin #loginbtn': {
     ^ xtype     ^ itemId

请注意,您应该使用itemId而不是id因为id在任何时候都必须在页面上itemId是唯一的,在组件内部应该是唯一的;像这样改变:

{
      text: 'Login',
      itemId: 'loginbtn',
      ^ replace id by itemId
      formBind: true,
      name: 'login'
}
于 2013-10-30T14:11:51.547 回答