dojo.subscribe
| Status: | Draft |
|---|---|
| Version: | 1.0 |
| Available: | since 0.9 |
Linked a listener to a named topic.
Introduction
Subscribe is a part of the the Dojo Topic system used to register a function listening to a named channel. The channel is sent data via dojo.publish.
Usage
To subscribe a function to a channel:
1 2 3 | dojo.subscribe("/foo/bar/baz", function(data){
console.log("i got", data);
});
|
To trigger that function, publish some data on the same channel:
1 | dojo.publish("/foo/bar/baz", [{ some:"object data" }]);
|
The channel name can be any string you choose:
1 2 3 | dojo.subscribe("foo-bar", function(data){ /* handle */ });
dojo.subscribe("bar", function(data){ /* handle */ });
dojo.subscribe("/foo/bar", function(data){ /* handle */ });
|
Each are unique channels.
Globbing
Dojo Topics do not support globbing, or mixing of channel names based on wildcards. This example is invalid:
1 | dojo.subscribe("/foo/*", function(data){ /* handle */ });
|
While this works when using cometd's dojox.cometd.subscribe function, it is not practical to do on the client side. Only fully named channels are supported.
Subscribing with scope
Subscribe uses dojo.hitch under the covers to provide more advanced functionality for controlling in which context the attached function will be called.
Consider the following object:
1 2 3 4 5 6 | var obj = {
member:"unpublished",
anon: function(data){
this.member = "fixed";
}
}
|
To execute an anonymous function in the scope of obj:
1 2 3 4 | dojo.subscribe("/foo/bar", obj, function(data){
// here 'this' refers to the obj instance
this.member = "published";
});
|
Alternately, you can pass a named function instead of an anonymous function with scope:
1 | dojo.subscribe("/foo/bar", obj, "anon");
|
This will execute obj.anon() in the scope of obj, passing in whatever data the accompanying dojo.publish call sent.