AJAX для ASP.NET и шаблоны на стороне клиента - Дальнейшие перспективы

ОГЛАВЛЕНИЕ

Дальнейшие перспективы

Есть ли разница между указанием шаблона в виде обычной строки и в качестве встроенного поддерева DOM или острова данных XML? С точки зрения построителя разметки никакой разницы нет — всё, что необходимо, это чтобы строка присоединялась к буферу составителя строк С точки зрения разработчика, возможно, лучше использовать шаблоны DOM — их легко проверить, а также можно загружать по URL-адресу.

Хотя представленное здесь решение разработано для работы только с коллекциями данных, оно следует принципам проектирования, применяемым в свободно распространяемых платформах для работы с шаблонами на стороне клиента. Одна из таких сред, которую мне хотелось бы упомянуть особо, это PrototypeJS. Дополнительная информация, примеры и исходный код находятся на странице prototypejs.org/api/template.

Можно ли улучшить что-нибудь еще? Конечно! Обратите внимание, что код, приведенный в этой статье, реализует только минимальный набор функций, которые можно ожидать от подсистемы шаблонов и привязки данных на стороне обозревателя.

Как видно на рис. 7, в данной реализации отсутствует возможность различать цены растущих и падающих акций по цвету, как в варианте на рис. 2. В коде с рис. 2 событие RowDataBound элемента управления GridView обрабатывается самим кодом приложения, и стили затронутых клеток меняются напрямую:

void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
   if (e.Row.Cells[2].Text.StartsWith("+"))
     e.Row.Cells[2].ForeColor = Color.Green;
   if (e.Row.Cells[2].Text.StartsWith("-"))
     e.Row.Cells[2].ForeColor = Color.Red;

В решении, связанном с частичной визуализацией, предполагается, что все эти действия со стилями выполняются на сервере и, следовательно, могут использовать полнофункциональную модель программирования связанных с данными элементов управления на сервере. Чтобы добиться того же на стороне клиента, требуется более сложный построитель разметки, который мог бы принимать делегат функции, который и назначал бы стили каждому блоку связанных данных перед тем, как они попадут в буфер.

Есть и еще одно важное различие между примерами кода с рис. 2 и 7, которого не видно за напечатанными числами. Чтобы найти это отличие, попробуйте запустить обе страницы и нажать на другие видимые кнопки («прогнозы погоды» и «запустить задание»). Страница, показанная на рис. 7, не останавливает другие задания на время извлечения котировок акций, а ее собственный вызов службы на сервере не прерывается запуском какого-то другого задания.

В чем причина? Помните, что в варианте с частичной визуализацией в одно и то же время в одном и том же сеансе мог работать только один запрос — точно так же, как и на странице, где AJAX не используется. Конечно же, если работать прямо через XMLHttpRequest, одновременно работающих вызовов может быть сколько угодно. Более того, если вызывать службы напрямую, то не нужно следить за состоянием представления и за тем, останется ли оно согласованным после нескольких запросов на частичную визуализацию (это и есть главная причина того, что частичная визуализация не дает выполнять операции параллельно).