Location: A review of cardiac cellular electrophysiology models @ 98909b01e6b2 / dojo-presentation / js / dojo / dojox / data / restListener.js

Author:
David Nickerson <nickerso@users.sourceforge.net>
Date:
2009-07-07 17:11:57+12:00
Desc:
update for modified HH graphs in tutorial description
Permanent Source URI:
https://models.physiomeproject.org/workspace/a1/rawfile/98909b01e6b21653a5e1cd28865dd259c586d490/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
		}
	}
};