0

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

ログインボタンをクリックした後、コードは「クリック」をコンソールに記録するはずですが、何もしません。誰でも私を助けることができますか?

回答ありがとうございます。

4

2 に答える 2

2

問題は、ボタンの参照方法にあります。

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

コントローラーで使用する参照 getter メソッドthis.getLoginbtnを作成していますが、コントローラーでは使用できませんthis.control

の文字列キーthis.controlは、 で定義されているような識別子Ext.ComponentQuery.queryです。xtype/alias と itemId を検索します。

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

常にページ上で一意である必要があるため、コンポーネント内で一意である必要がありますitemId。次のように変更します。ididitemId

{
      text: 'Login',
      itemId: 'loginbtn',
      ^ replace id by itemId
      formBind: true,
      name: 'login'
}
于 2013-10-30T14:11:51.547 に答える
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 に答える