0

私は、javascript と ExtJ の両方にまったく慣れていない独学の学生です。

私がやろうとしているのは、メイン クラスの動物を作成し、2 つのサブクラスに動物からプロパティ/メソッドを継承させることです。それらは猫と犬です...次に、複数のオブジェクト(複数の猫と犬)がクラス猫と犬から継承されるようにしたいと思います。cat1、mycat、cat2、dog1、mydog、topdog などの複数のオブジェクトは、互いに話したり聞いたりできるはずでした。

cat1、mycat などが話すとき、それは単なるアラート (もの) であり、それが起こると、犬は「mydog がそれを聞いた」と警告します。

コミュニティの助けを借りて、すでに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ます。

もう 1 つの注意点: クラスには常に大文字の名前を付ける必要があります (Animalの代わりに使用しますanimal)。

于 2013-07-03T18:56:27.443 に答える