Ext JS事件/回调,newb的对象通信

时间:2013-07-03 18:20:50

标签: events extjs

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

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

当cat1,mycat等说话时,它只是警报(东西),当发生这种情况时,狗警告“mydog听到了”。

我已经在社区(How to create listeners with 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自动听到makeound('meow')并警告我的狗听到了。但是在extJS中。任何帮助或建议将非常感谢。

1 个答案:

答案 0 :(得分:0)

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

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

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

您当前设置的方式是,您的听众位于myDog,这意味着当您发出myDog发出声音时,您的“mydog听到了”,而不是myCat

另一个注意事项:您应始终使用大写字母命名您的班级(使用Animal代替animal)。