事件命名空间不是层次结构。
使用您拥有的代码,$('#someid').trigger('griffin.model');
触发所有,并且$('#someid').trigger('griffin.updated');
触发全部。
$('body').bind('griffin.model.updated.user', function() {
alert('Exact namespace = trigger');
});
$('body').bind('griffin.model.updated', function() {
alert('Will not trigger :(');
});
$('#someid').bind('griffin.model.updated', function() {
alert('Same item, but not the same namespace = wont trigger');
});
在这里,您基本上为第一个创建了三个单独的命名空间,为第二个和第三个创建了两个单独的命名空间。
仔细看这个例子 http://jsfiddle.net/PsR6x/2/并阅读我给你留下的评论。有时尝试许多不同的事情,看看你能做哪些不同的事情是很有用的。
关于on()
不工作:
此代码片段直接取自 jquery-1.7.1.js:
bind: function( types, data, fn ) {
return this.on( types, null, data, fn );
}
如你看到的,bind()
只是一个包装on()
,并且应该工作完全相同,除了bind()
不支持选择器或委托。