繁体   English   中英

ExtJS MVC表单参考

[英]ExtJS MVC form references

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

app.js

Ext.application({
    name: 'Fleximanager',

    requires: [
    ],

    controllers: [
        'Login'
    ],

    autoCreateViewport: true,

    init: function() {
    }
});

Viewport.js

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

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');
                }
            }
        })
    }
});

单击登录按钮后,该代码应该记录“单击”以进行控制台,但是它什么也没做。 谁能帮我?

感谢您的回答。

像这样给按钮命名,

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

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

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

这将达到您的目的。

问题出在您如何引用按钮上。

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

正在创建引用吸气剂方法this.getLoginbtn以在控制器中使用,但不能在this.control

this.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'
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM