事件监听器和自定义事件ExtJS
Event Listeners and Custom Events ExtJS
下面的代码正是我想要它做的:
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();
dog1(布鲁诺)将收听cat1.makeSound并用dog1.listen回应。接下来我想尝试使用监听器配置:
var cat1 = new Cats({
name: 'Domino',
listeners:
{
scope: dog1,
talk: dog1.listen
}
});
我似乎很难让它发挥作用。不确定我是否正确地使用了语法,找不到语法示例。如果你有一个例子或一些信息可以帮助我解决这个问题,请告诉我。以下是我为事件处理的侦听器配置方式准备的完整代码:
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();
直接从另一个对象调用一个对象方法真的是个坏主意。你应该考虑重新设计你的逻辑。如果您需要这些类/对象来相互通信,您应该使用您在第一个示例中描述的方法,或者使用全局事件。
相关文章:
- 事件的ExtJS控制器选择器
- extjs关闭事件不'不要开火
- 使用ExtJS捕获功能键事件(F1-F12)
- 从面板中调用一个在 ExtJs 中没有事件的方法
- 点击tpl链接时,ExtJS 4.2自定义组件触发事件
- extjs网格真实的完全后渲染事件
- ExtJS 4按钮上的mousedown/mouseup事件
- extjs中事件处理程序函数中的THIS上下文
- ExtJS::如何添加特定的"specialkey事件”;表示逗号到数字字段
- Extjs 4,事件处理,范围,自定义组件
- extjs,如何在表单操作中绑定事件
- 单击“ExtJS”中的“事件/侦听器”
- 以编程方式模糊 EXTJS 3.2.1 中的组合框控件不会触发“模糊”事件
- EXTJS 3,如何手动控制分页事件
- 在 ExtJS 组合框选取器上滚动事件
- store.loadData 是否会在 ExtJs 4.2.5 上的存储上触发加载事件
- 从 ExtJs 4.1 存储中删除记录时触发哪些事件
- ExtJS 事件委派不起作用
- ExtJs 并单击子元素上的事件
- 事件监听器和自定义事件ExtJS