|
1 | 1 | (function( jQuery ) {
|
2 | 2 |
|
3 | 3 | var channels = {},
|
4 |
| - channelMethods = { |
5 |
| - publish: "fire", |
6 |
| - subscribe: "add", |
7 |
| - unsubscribe: "remove" |
8 |
| - }, |
9 | 4 | sliceChannel = [].slice;
|
10 | 5 |
|
11 | 6 | jQuery.Channel = function( name ) {
|
|
14 | 9 | channel = name && channels[ name ];
|
15 | 10 | if ( !channel ) {
|
16 | 11 | callbacks = jQuery.Callbacks();
|
17 |
| - channel = {}; |
18 |
| - for ( method in channelMethods ) { |
19 |
| - channel[ method ] = callbacks[ channelMethods[ method ] ]; |
20 |
| - } |
| 12 | + channel = { |
| 13 | + publish: callbacks.fire, |
| 14 | + subscribe: callbacks.add, |
| 15 | + unsubscribe: callbacks.remove |
| 16 | + }; |
21 | 17 | if ( name ) {
|
22 | 18 | channels[ name ] = channel;
|
23 | 19 | }
|
24 | 20 | }
|
25 | 21 | return channel;
|
26 | 22 | };
|
27 | 23 |
|
28 |
| - jQuery.each( channelMethods, function( method ) { |
29 |
| - jQuery[ method ] = function( name ) { |
30 |
| - var channel = jQuery.Channel( name ); |
31 |
| - channel[ method ].apply( channel, sliceChannel.call( arguments, 1 ) ); |
32 |
| - }; |
| 24 | + jQuery.extend({ |
| 25 | + subscribe: function( id ) { |
| 26 | + var channel = jQuery.Channel( id ), |
| 27 | + args = sliceChannel.call( arguments, 1 ); |
| 28 | + channel.subscribe.apply( channel, args ); |
| 29 | + return { |
| 30 | + channel: channel, |
| 31 | + args: args |
| 32 | + }; |
| 33 | + }, |
| 34 | + unsubscribe: function( id ) { |
| 35 | + var channel = id && id.channel || jQuery.Channel( id ); |
| 36 | + channel.unsubscribe.apply( channel, id && id.args || |
| 37 | + sliceChannel.call( arguments, 1 ) ); |
| 38 | + }, |
| 39 | + publish: function( id ) { |
| 40 | + var channel = jQuery.Channel( id ); |
| 41 | + channel.publish.apply( channel, sliceChannel.call( arguments, 1 ) ); |
| 42 | + } |
33 | 43 | });
|
34 | 44 |
|
35 | 45 | })( jQuery );
|
0 commit comments