Мое приложение спроектировано как множество плагинов, которые еще не были написаны. Для этого есть длинная причина, но с каждым новым годом бизнес-логика будет отличаться, и мы не знаем, как это будет выглядеть (подумайте о TurboTax, если это поможет). Плагины состоят из серверного и клиентского компонентов. Компоненты сервера имеют дело с бизнес-логикой и сохранением данных в таблицах базы данных, которые также будут созданы позже. JavaScript манипулирует DOM, чтобы браузеры отображали его позже.
Каждый плагин находится в отдельной сборке, чтобы он не мешал основному приложению, т. Е. Мы не хотим перекомпилировать основное приложение. Короче говоря, я ищу способ вернуть функции JavaScript клиенту из запроса get Ajax и выполнить эти функции JavaScript (которые только что были возвращены). Вызвать функцию в Javascript легко. Сложная часть - как организовать или структурировать, чтобы мне не пришлось иметь дело с проблемой обслуживания. Таким образом, использование метода StringBuilder для получения кода JavaScript в результате вызова toString () из объекта компоновщика строк исключено.
Я хочу, чтобы между написанием кодов JavaScript и написанием кодов Javascript для этой динамической цели не было разницы.
Альтернативой является манипулирование DOM на стороне сервера, но я сомневаюсь, что это будет так же элегантно, как использование jQuery на стороне клиента. Я открыт для библиотеки C #, которая поддерживает цепные вызовы, такие как jQuery, которая также манипулирует DOM.
Есть ли у вас какие-либо идеи или это слишком много, чтобы спросить, или вы слишком запутались?
Edit1 : Смысл в том, чтобы избежать перекомпиляции, следовательно, архитектура плагинов. В некоторых других частях программы я уже использую концепцию динамической загрузки файлов Javascript. Это отлично работает. То, что я смотрю здесь, где-то в середине программы, когда Ajax-запрос отправляется на сервер.
Редактировать 2 : Чтобы проиллюстрировать мой вопрос:
Обычно вы увидите следующий код. Ajax-запрос отправляется на сервер, а JSON-результат возвращается клиенту, который затем использует jQuery для манипулирования DOM (в этом случае создает тег и добавляет его в контейнер).
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);
});
}
});
Выше очень просто. Но в следующем году то, что возвращает сервер, будет совершенно другим, и то, как будут отображаться данные, также будет другим. В некотором смысле, это то, что я хочу:
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);
}
});
Мне не нужно знать, на что сейчас будут похожи данные, но в будущем я узнаю, и тогда я смогу написать fx соответственно.