私の全体的な目標は、指定された動物(cat1)に音を出させ(アラートボックス)、別の特定の動物(dog1)に猫の音を聞いてもらい、音で応答させることです。
次のコードでは、bind コマンドを使用してコールバックを実装しようとしました。
Ext.define('Animal',
{
name: 'Unknown',
sound: 'Unknown',
listening: this.listening,
constructor: function(name)
{
if (name)
{
this.name = name;
}
},
makeSound: function()
{
alert(this.name + " says " + this.sound);
if(this.listening)
{
this.listening();
}
},
isListening: function(listening)
{
this.listening = listening;
}
});
Ext.define('Cats',
{
extend: 'Animal',
name: 'Unknown',
sound: 'Meow',
listening: this.listening,
listen: function()
{
if(this.listening)
alert(this.name + "is listening.");
}
});
Ext.define('Dogs',
{
extend: 'Animal',
name: 'Unknown',
sound: 'Woof',
listening: this.listening,
listen: function()
{
if(this.listening)
alert(this.name + "is listening.");
}
});
var cat1 = Ext.create('Cats', 'Domino');
var cat2 = Ext.create('Cats', 'Tiger');
var dog1 = Ext.create('Dogs', 'Bruno');
var dog2 = Ext.create('Dogs', 'Spot');
dog1.listen = dog1.listen.bind(dog1); //failed miserably, not sure of the proper usage,
cat1.isListening(dog1.listen); //I saw an example using this format.
cat1.makeSound();
cat2.makeSound();
dog1.makeSound();
dog2.makeSound();
これはもちろん私にとってはうまくいきませんでしたが、 bind コマンドの間違った使い方と同じくらい簡単かもしれません (コンソールにエラーが表示されないため、わかりにくい場合があります) 私が本当にこれを達成したい方法は次のとおりです:(コメント以下のコードでそれをかなりよく説明しています)
Ext.define('Animal',
{
name: 'Unknown',
sound: 'Unknown',
listening: this.listening,
constructor: function(name)
{
if (name)
{
this.name = name;
}
},
makeSound: function()
{
alert(this.name + " says " + this.sound);
},
listen: function(obj)
{
if(this.listening)
alert(obj.name + " is listening to " + this.name + ".");
}
});
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');
//some callback that will wait for a specific animal to make a sound
//and call the listen function in an intelligent way so I get this.name
//to be the animal that made that sound and the obj.name to be the
//animal that is listening
cat1.makeSound();
cat2.makeSound();
dog1.makeSound();
dog2.makeSound();
これには、適切なスコープを使用する必要がありますが、もちろん、どのように処理すればよいかわかりません。主に、コールバックのカスタム イベントから離れている間、この分野での助けを期待していました。どんな助けでも大歓迎です。