Blame | Last modification | View Log | RSS feed
if(!dojo._hasResource["dojox.wire.ml.Invocation"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.dojo._hasResource["dojox.wire.ml.Invocation"] = true;dojo.provide("dojox.wire.ml.Invocation");dojo.require("dojox.wire.ml.Action");dojo.declare("dojox.wire.ml.Invocation", dojox.wire.ml.Action, {// summary:// A widget to invoke a method or publish a topic// description:// This widget represents a controller task to invoke a method or// publish a topic when an event (a function) or a topic is issued.// object:// A scope of a method to invoke// method:// A name of a method to invoke// topic:// A name of a topic to publish// parameters:// Arguments for the method or the topic// result:// A property to store a return value of the method call// error:// A property to store an error on the method callobject: "",method: "",topic: "",parameters: "",result: "",error: "",_run: function(){// summary:// Invoke a method or publish a topic// description:// If 'topic' is specified, the topic is published with arguments// specified to 'parameters'.// If 'method' and 'object' are specified, the method is invoked// with arguments specified to 'parameters' and set the return// value to a property specified to 'result'.// 'object', 'parameters' and 'result' can specify properties of// a widget or an DOM element with the dotted notation.// If 'parameters' are omitted, the arguments to this method are// passed as is.if(this.topic){var args = this._getParameters(arguments);try{dojo.publish(this.topic, args);this.onComplete();}catch(e){this.onError(e);}}else if(this.method){var scope = (this.object ? dojox.wire.ml._getValue(this.object) : dojo.global);if(!scope){return; //undefined}var args = this._getParameters(arguments);var func = scope[this.method];if(!func){func = scope.callMethod;if(!func){return; //undefined}args = [this.method, args];}try{var connected = false;if(scope.getFeatures){var features = scope.getFeatures();if((this.method == "fetch" && features["dojo.data.api.Read"]) ||(this.method == "save" && features["dojo.data.api.Write"])){var arg = args[0];if(!arg.onComplete){arg.onComplete = function(){};}//dojo.connect(arg, "onComplete", this, "onComplete");this.connect(arg, "onComplete", "onComplete");if(!arg.onError){arg.onError = function(){};}//dojo.connect(arg, "onError", this, "onError");this.connect(arg, "onError", "onError");connected = true;}}var r = func.apply(scope, args);if(!connected){if(r && (r instanceof dojo.Deferred)){var self = this;r.addCallbacks(function(result){self.onComplete(result);},function(error){self.onError(error);});}else{this.onComplete(r);}}}catch(e){this.onError(e);}}},onComplete: function(/*anything*/result){// summary:// A function called when the method or the topic publish// completed// description:// If 'result' attribute is specified, the result object also set// to the specified property.// result:// The return value of a method or undefined for a topicif(this.result){dojox.wire.ml._setValue(this.result, result);}if(this.error){ // clear errordojox.wire.ml._setValue(this.error, "");}},onError: function(/*anything*/error){// summary:// A function called on an error occurs// description:// If 'error' attribute is specified, the error object also set to// the specified property.// error:// The exception or error occurredif(this.error){if(error && error.message){error = error.message;}dojox.wire.ml._setValue(this.error, error);}},_getParameters: function(/*Array*/args){// summary:// Returns arguments to a method or topic to invoke// description:// This method retunrs an array of arguments specified by// 'parameters' attribute, a comma-separated list of IDs and// their properties in a dotted notation.// If 'parameters' are omitted, the original arguments are// used.// args:// Arguments to a trigger event or topicif(!this.parameters){// use arguments as isreturn args; //Array}var parameters = [];var list = this.parameters.split(",");if(list.length == 1){var parameter = dojox.wire.ml._getValue(list[0], args);if(dojo.isArray(parameter)){parameters = parameter;}else{parameters.push(parameter);}}else{for(var i in list){parameters.push(dojox.wire.ml._getValue(list[i], args));}}return parameters; //Array}});}