Mi aplicación está diseñada como un host de complementos que aún no se han escrito. Hay una razón larga para esto, pero con cada nuevo año, la lógica comercial será diferente y no sabemos cómo será (piense en TurboTax si eso ayuda). Los complementos constan de componentes de servidor y cliente. Los componentes del servidor se ocupan de la lógica empresarial y persisten los datos en las tablas de la base de datos que se crearán más adelante. El JavaScript manipula el DOM para que los navegadores lo muestren después.¿Cuál es una forma limpia de que el servidor devuelva una función de JavaScript que luego se invocaría?
Cada complemento vive en un ensamblaje separado, para que no molesten a la aplicación principal, es decir, no queremos volver a compilar la aplicación principal. Para resumir, estoy buscando una forma de devolver las funciones de JavaScript al cliente desde una solicitud de obtención de Ajax, y ejecutar estas funciones de JavaScript (que acabo de devolver). Invocar una función en Javascript es fácil. La parte difícil es cómo organizar o estructurar para no tener que lidiar con un problema de mantenimiento. Entonces, concat usando StringBuilder para terminar con código JavaScript como resultado de llamar a String() desde el objeto del generador de cadenas está fuera de la cuestión.
No quiero diferenciar entre escribir normalmente códigos JavaScript y escribir códigos Javascript para este propósito dinámico.
Una alternativa es manipular el DOM en el lado del servidor, pero dudo que sea tan elegante como usar jQuery en el lado del cliente. Estoy abierto para una biblioteca de C# que admita llamadas encadenables como jQuery que también manipula el DOM.
¿Tiene alguna idea o es demasiado pedir o está demasiado confundido?
Edit1: El objetivo es evitar la recompilación, de ahí la arquitectura de los plugins. En algunas otras partes del programa, ya utilizo el concepto de cargar archivos Javascript de forma dinámica. Eso funciona bien Lo que estoy buscando aquí está en algún lugar en el medio del programa cuando se envía una solicitud de Ajax al servidor.
Editar 2: Para ilustrar mi pregunta:
Normalmente, se podría ver el siguiente código. Se envía una solicitud Ajax al servidor, se devuelve un resultado JSON al cliente que luego usa jQuery para manipular el DOM (crear una etiqueta y agregarla al contenedor en este caso).
var container = $('#some-existing-element-on-the-page');
$.ajax({
type: 'get',
url: someUrl,
data: {'': ''},
success: function(data) {
var ul = $('<ul>').appendTo(container);
var decoded = $.parseJSON(data);
$.each(decoded, function(i, e) {
var li = $('<li>').text(e.FIELD1 + ',' + e.FIELD2 + ',' + e.FIELD3)
.appendTo(ul);
});
}
});
Lo anterior es extremadamente simple. Pero el próximo año, lo que el servidor devuelve es totalmente diferente y cómo los datos que se van a presentar también serán diferentes. En cierto modo, esto es lo que quiero:
var container = $('#some-existing-element-on-the-page');
$.ajax({
type: 'get',
url: someUrl,
data: {'': ''},
success: function(data) {
var decoded = $.parseJSON(data);
var fx = decoded.fx;
var data = decode.data;
//fx is the dynamic function that create the DOM from the data and append to the existing container
fx(container, data);
}
});
No necesito saber, en este momento qué datos serían como, pero en el futuro lo haré, y luego puedo escribir fx en consecuencia.
Consulte las ediciones nuevas si pudieran aclararle la pregunta. –