Llamada a acciones desde vistas
Puede invocar acciones desde vistas. Las acciones Application Engine.
Antes de empezar
Acerca de esta tarea
Para llamar a una acción desde una vista, debe especificar las opciones de configuración de tipo Acción en las declaraciones de variable de la vista y seleccionar una acción predeterminada que se va a utilizar. La acción predeterminada es la interfaz de programación de aplicaciones (API) para la que debe coincidir las acciones personalizadas. Los nombres y los tipos de las entradas y salidas deben coincidir.
Procedimiento
Ejemplo
El ejemplo siguiente es código JavaScript para un manejador de sucesos
load :var _this = this;
var input = {text: this.context.options.service_option_name.get("value")};
var serviceArgs = {
params: JSON.stringify(input),
load: function(data) {
console.log("service returned: ", data);
// now dynamically create the img tag
require(["dojo/_base/url"], function(url) {
var relPath = new url(data.path).path;
domConstruct.create("img", {src:relPath, style:"margin:5px 0px"}, _this.context.element, "first");
});
},
error: function(e) {console.log("service call failed: ", e);}
}
this.context.options.service_name(serviceArgs);Sugerencia: Si la salida de la acción es un objeto de negocio de tipo complejo, el objeto de datos que obtiene de la respuesta contiene una propiedad que contiene los metadatos del objeto, por ejemplo:
{"status":"200","data":{"serviceStatus":"end","key":"@54","step":"End","data":
{"bookPlacedPosition":{"Floor":1,"Room":"101","Row":2,"@metadata":
{"dirty":true,"shared":false,"rootVersionContextID":"2064.c30905ba-8d17-41f4-
b2a8-08cbb6516ff0T","className":"PlacedPosition"}}},"actions":null}} Si establece directamente el objeto de respuesta en el enlace, como en el siguiente ejemplo, el objeto @metadata se añade en su estructura:this.context.binding.get("value").set("BookPlacedPosition",data.bookPlacedPosition); Cuando desencadena el suceso límite en el servidor, el servidor genera una excepción porque no espera que el suceso límite tenga el objeto @metadata. Para evitar una excepción, elimine el objeto @metadata de la respuesta antes de establecerla en el enlace, por ejemplo:delete data.bookPlacedPosition['@metadata'];
_this.context.binding.get("value").set("BookPlacedPosition",data.bookPlacedPosition);