0

我是一名自学学生,对 javascript 和 ExtJs 都是全新的。

我想做的是创建一个主类动物,然后让两个子类从动物继承属性/方法。那些是猫和狗......然后我想让多个对象(多个猫和狗的)继承自猫和狗类。多个对象,cat1、mycat、cat2、dog1、mydog、topdog 等......应该能够相互交谈和倾听。

当 cat1、mycat 等说话时,它只是警觉(东西),当这种情况发生时,狗会提醒“我的狗听到了”。

在社区的帮助下,我已经在 javascript 中做到了这一点(如何使用 javascript 创建侦听器

我现在也想用 ExtJS 来做这件事。这是我到目前为止所拥有的

Ext.define('animal', {
    extend: 'Ext.util.Observable',
    constructor: function(config)
    {
        this.name = config.name;
        this.addEvents({'makesound' :true});
        this.listeners = config.listeners;
        //animal.superclass.constructor.call(this, config);
        this.callParent(arguments);
    },

    makesound: function() 
    {
        alert(this.sound);
        this.fireEvent('makesound'); // this is wrong isn't it?
                                     // I was thinking that the make sound  
                                     // would trigger the event makesound                             
    }
});


//var cat = Ext.create('animal');
//var dog = new animal;

//cat.makesound();
//dog.makesound();

Ext.define('cat', {
    extend: 'animal',
    name: name,
    sound: 'meow'
});
Ext.define('dog', {
    extend: 'animal',
    name: name,
    sound: 'woof'
});

var myCat = new cat({
    name: 'myCat'});

var myDog = new dog({
    name:'mydog',
    listeners: {    
        makesound: function() {
            alert('mydog heard that');
        }
    }
});

myCat.makesound();
myDog.fireEvent('makesound');  //

我真正想要的是让 mycat 发出声音,然后 mydog 会自动听到那个声音(“喵喵声”)并提醒我的狗听到了。虽然在 extJS 中。任何帮助或建议将不胜感激。

4

1 回答 1

0

您似乎正确设置了类定义,只需将侦听器添加到正确的实例:

var myCat = new Cat({ name: 'myCat' });
var myDog = new Dog({ name: 'myDog' });

myCat.on('makesound', function() {
    myDog.makesound();
});

您当前的设置方式是,您的监听器处于打开状态myDog,这意味着您的“我的狗听到了”会在myDog发出声音时出现,而不是myCat

另一个注意事项:您应该始终使用大写字母命名您的类(使用Animal而不是animal)。

于 2013-07-03T18:56:27.443 回答