- Author:
- David Nickerson <nickerso@users.sourceforge.net>
- Date:
- 2009-07-07 22:22:32+12:00
- Desc:
- renaming files in order to move to a single reference description for the entire tutorial
- Permanent Source URI:
- https://models.physiomeproject.org/workspace/a1/rawfile/0c824288680f5949ea1972a76176826599ef6d26/dojo-presentation/js/dojo/dojox/data/restListener.js
dojo.provide("dojox.data.restListener");
dojo.require("dojox.rpc.JsonRest");
dojox.data.restListener = function(message){
// summary:
// this function can be used to receive REST notifications, from Comet or from another frame
// description:
// Example:
// | dojo.connect(window,"onMessage",null,function(event) {
// | var data = dojo.fromJson(event.data);
// | dojox.restListener(data);
// | });
var channel = message.channel;
var jr = dojox.rpc.JsonRest;
var service = jr.getServiceAndId(channel).service;
var result = dojox.json.ref.resolveJson(message.data, {
defaultId: message.event == 'put' && channel,
index: dojox.rpc.Rest._index,
idPrefix: service.servicePath,
idAttribute: jr.getIdAttribute(service),
schemas: jr.schemas,
loader: jr._loader
});
var target = dojox.rpc.Rest._index && dojox.rpc.Rest._index[channel];
var onEvent = 'on' + message.event.toLowerCase();
var store = service && service._store;
if(target){
if(target[onEvent]){
target[onEvent](result); // call the REST handler if available
return;
}
}
// this is how we respond to different events
if(store){
switch(onEvent){
case 'onpost':
store.onNew(result); // call onNew for the store;
break;
case 'ondelete':
store.onDelete(target);
break;
// put is handled by JsonReferencing
//TODO: we may want to bring the JsonReferencing capability into here...
// that is really tricky though because JsonReferencing handles sub object,
// it would be expensive to do full object graph searches from here
}
}
};