Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 事件侦听器和自定义事件ExtJS_Javascript_Extjs_Dom Events - Fatal编程技术网

Javascript 事件侦听器和自定义事件ExtJS

Javascript 事件侦听器和自定义事件ExtJS,javascript,extjs,dom-events,Javascript,Extjs,Dom Events,以下代码正是我希望它执行的操作: Ext.define('Animal', { extend: 'Ext.util.Observable', name: 'Unknown', sound: 'Unknown', constructor: function(name) { this.name = name; this.addEvents('talk'); //n

以下代码正是我希望它执行的操作:

Ext.define('Animal', 
    {
        extend: 'Ext.util.Observable',
        name: 'Unknown',
        sound: 'Unknown',
        constructor: function(name)
        {
            this.name = name;
            this.addEvents('talk'); //not needed. AddListener(.on) creates the event in the Observable if it didn't already exist... - Animal www.sencha.com
            this.listeners = this.listeners;
            this.callParent(arguments);
            for(i = 0; i<arguments.length; i++)//callParent(arguments)? array(ish)
                console.log(arguments[i]);
        },
        makeSound: function() 
        {
            alert(this.name + " says " + this.sound);
            this.fireEvent('talk');
        },
        listen: function()
        {
            alert(this.name + " is listening.");
        }
    });

Ext.define('Cats',
    {
        extend: 'Animal',
        name: 'Unknown',
        sound: 'Meow',
    });
Ext.define('Dogs',
    {
        extend: 'Animal',
        name: 'Unknown',
        sound: 'Woof',
    });
var cat1 = Ext.create('Cats', 'Domino');
var cat2 = Ext.create('Cats', 'Tiger');
var dog1 = Ext.create('Dogs', 'Bruno');
var dog2 = Ext.create('Dogs', 'Spot');

cat1.on('talk', function(){dog1.listen()});
dog2.on('talk', function(){cat2.listen()});

cat1.makeSound();
cat2.makeSound();
dog1.makeSound();
dog2.makeSound();
我似乎很难让它工作。不确定我是否正确使用了语法,难以找到语法示例。如果您有一个示例或一些信息可以帮助我解决此问题,请告诉我。以下是我拥有的事件处理侦听器配置方式的完整代码:

Ext.define('Animal', 
    {
        extend: 'Ext.util.Observable',
        name: 'Unknown',
        sound: 'Unknown',
        constructor: function(config)
        {
            this.name = config.name;
            this.addEvents('talk'); //not needed. AddListener(.on) creates the event in the Observable if it didn't already exist... - Animal www.sencha.com
            this.listeners = this.listeners;
            this.callParent(arguments);
            for(i = 0; i<arguments.length; i++)//callParent(arguments)? array(ish)
                console.log(arguments[i]);
        },
        makeSound: function() 
        {
            alert(this.name + " says " + this.sound);
            this.fireEvent('talk');
        },
        listen: function()
        {
            alert(this.name + " is listening.");
        }
    });

Ext.define('Cats',
    {
        extend: 'Animal',
        name: 'Unknown',
        sound: 'Meow',
    });
Ext.define('Dogs',
    {
        extend: 'Animal',
        name: 'Unknown',
        sound: 'Woof',
    });
var cat1 = new Cats(
    {
        name: 'Domino',
        listeners:
        {
            talk: dog1.listen
        }
    });
var cat2 = Ext.create('Cats', 'Tiger');
var dog1 = Ext.create('Dogs', 'Bruno');
var dog2 = new Dogs(
    {
        name: 'Spot',
        listeners:
        {
            talk: cat2.listen
        }
    });

cat1.makeSound();
cat2.makeSound();
dog1.makeSound();
dog2.makeSound();
Ext.define('Animal',
{
扩展:“Ext.util.Observable”,
名称:'未知',
声音:“未知”,
构造函数:函数(配置)
{
this.name=config.name;
this.addEvents('talk');//不需要。AddListener(.on)在不存在的可观察事件中创建事件…-Animal www.sencha.com

this.listeners=this.listeners; this.callParent(参数);
对于(i=0;i)从另一个对象直接调用一个对象方法是一个坏主意。你应该考虑重新设计你的逻辑。如果你需要这些类/对象相互通信,你应该使用你在第一个样本中描述的方法,或者全局事件。“直接从另一个对象调用一个对象方法是一个糟糕的主意。"-sha.你是指监听器配置吗?如果是这样的话,我只是想用类似的方法来完成任务。你能详细解释一下为什么我不应该直接从另一个对象调用方法吗?你的cat1对象不应该知道你的dog1对象的实现细节。在你的代码中,cat1对象方法调用应该知道GO1方法直接。DoG1可以从CAT1订阅事件,并且在处理程序中执行它自己的功能。嗯,好的。谢谢。你已经说服我重新考虑我的问题,所以我会考虑你的答案是最好的答案。
Ext.define('Animal', 
    {
        extend: 'Ext.util.Observable',
        name: 'Unknown',
        sound: 'Unknown',
        constructor: function(config)
        {
            this.name = config.name;
            this.addEvents('talk'); //not needed. AddListener(.on) creates the event in the Observable if it didn't already exist... - Animal www.sencha.com
            this.listeners = this.listeners;
            this.callParent(arguments);
            for(i = 0; i<arguments.length; i++)//callParent(arguments)? array(ish)
                console.log(arguments[i]);
        },
        makeSound: function() 
        {
            alert(this.name + " says " + this.sound);
            this.fireEvent('talk');
        },
        listen: function()
        {
            alert(this.name + " is listening.");
        }
    });

Ext.define('Cats',
    {
        extend: 'Animal',
        name: 'Unknown',
        sound: 'Meow',
    });
Ext.define('Dogs',
    {
        extend: 'Animal',
        name: 'Unknown',
        sound: 'Woof',
    });
var cat1 = new Cats(
    {
        name: 'Domino',
        listeners:
        {
            talk: dog1.listen
        }
    });
var cat2 = Ext.create('Cats', 'Tiger');
var dog1 = Ext.create('Dogs', 'Bruno');
var dog2 = new Dogs(
    {
        name: 'Spot',
        listeners:
        {
            talk: cat2.listen
        }
    });

cat1.makeSound();
cat2.makeSound();
dog1.makeSound();
dog2.makeSound();