1

我想为文本字段上的更改事件添加一个事件侦听器。我创建了一个包含表单面板的视图 - 到目前为止一切正常。

现在我尝试向其中一个文本字段添加一个事件侦听器:

  items:[
        {
            xtype    :"textfield",
            name     :"field",
            label    :"field",
            required :true,
            listeners:{
                change:{
                    fn    : "onChangeHandler",
                    scope: this
                },
            }
    },

但它并没有真正起作用..没有任何反应。没有错误,也没有函数调用。我究竟做错了什么?

编辑:

尝试了另一件事 - 直接在项目定义中:

    {
    xtype    :"textfield",
    name     :"field",
    label    :"field",
    required :true,
    listeners:{
        change:{
            fn    :this.onChange
        },
        scope :this
    }
},

但随后在更改时,我在控制台上收到此错误:

未捕获的类型错误:无法调用未定义的方法“应用”

4

3 回答 3

2

尝试改变这个:

listeners:{
                        change:{
                            fn    : "onChangeHandler",
                            scope: this
                        },
                    }

对此:

listeners:{
                        change: this.onChangeHandler
                    }

更新: 最简单的方法是为你的app.view.Login(比如'abc')设置一个id,然后:

fn: function() {Ext.getCmp('abc').onEvent();},
于 2012-05-25T14:20:44.033 回答
2

我认为“this”存在某种范围界定问题。在控制器中处理事件可能会更好。将 id 添加到您的用户名文本字段(id:'username',),然后尝试使用我的控制器。我得到 keyup 和 tap 事件的回调;更改回调后我遇到了某种错误,但它确实触发了。此外,您的 keyup 事件名称错误。Sencha 列出了每个对象的所有事件,我觉得这很有帮助。

在此处输入图像描述

登录控制器

Ext.define("App.controller.LoginController", {
    扩展:“Ext.app.Controller”,

    配置:{
        参考:{
            用户名:'#username'
        },
        控制: {
            用户名: {
                keyup: 'onUsernameKeyUp',
                更改:'onUsernameChange'
            }
        }
    },
    onUsernameKeyUp:函数(){
        console.log("onUsernameKeyUp");
    },
    onUsernameChange:函数(){
        console.log("onUsernameChange");
    },
    启动:函数(){
        this.callParent();
        console.log("启动");
    },
    初始化:函数(){
        this.callParent();
        console.log("init");
    }
});

app.js - 添加控制器:[]

分机应用程序({
    名称:'应用程序',

    控制器:['LoginController'],
    phoneStartupScreen :'resources/loading/Homescreen.jpg',
    tabletStartupScreen:'resources/loading/Homescreen~ipad.jpg',

    启动:函数(){
        var loginform = Ext.create("App.view.Login");

        Ext.Viewport.add([loginform]);
    },
});
于 2012-05-25T16:59:56.407 回答
0

您必须将“范围”放入“更改”块中。

listeners:{
  change:{
    fn    :this.onChange,
    scope :this
  }
}

你有错误Uncaught TypeError: Cannot call method 'apply' of undefined ,因为你写了:

listeners:{
  change:{
    fn    :this.onChange
    },
    scope :this
}

你看得到差别吗?:)

还要检查您是否将侦听器放入“config”块并在“config”块之后执行“onChange”函数。

于 2012-05-26T07:32:25.203 回答