【问题标题】:ExtJS MVC form referencesExtJS MVC 表单引用
【发布时间】:2013-11-10 01:46:28
【问题描述】:

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

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

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

感谢您的任何回答。

【问题讨论】:

    标签: javascript model-view-controller extjs extjs4.2


    【解决方案1】:

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

    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 而不是id,因为id 在页面上任何时候都必须是唯一的,itemId 在组件内应该是唯一的;改成这样:

    {
          text: 'Login',
          itemId: 'loginbtn',
          ^ replace id by itemId
          formBind: true,
          name: 'login'
    }
    

    【讨论】:

      【解决方案2】:

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

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

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

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

      这将达到您的目的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-03-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多