Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
206
Добавлен:
10.05.2015
Размер:
8.8 Mб
Скачать

14.2.7.3. Наследование JavaScript

Наследование JavaScript в Jasp реализовано через прототипы. Оно очень похоже на классическое наследование в объектно-ориентированном программировании (ООП). При определении новых методов, они будут переопределять родительские. В новом методе можно вызвать базовый метод. Например, JavaScript базового компонента:

{

hi: function() {

alert('Базовый привет!');

}

}

И производного:

{

hi: function() {

alert('Привет!');

BaseFooControl.prototype.call(this);

}

}

Для библиотек, которые поддерживают наследование через прототипы (например, ExtJS) можно задать базовый класс для компонента из библиотеки с помощью атрибута ClientBaseAttribute:

[ClientBase("Ext.Window")]

public class FooControl : UserControl

{

//....

public FooControl(int fooId)

{

// подгружаем необходимые данные

}

}

Клиентский код:

{

onFooButtonClick: function() {

// Создаем FooControl

// происходит вызов серверного конструктора – в нем можно подгрузить необходимые данные

// и вызов $init – в нем инициализировать окно, подставить загруженные данные

var fooControl = new FooControl({

arg: [1] // параметры конструктора

});

// Показываем окно (метод show наследован из ExtJs)

fooControl.show();

}

// ...

}

Благодаря этому, компонент на Jasp будет являться одновременно и компонентом ExtJS (либо другой библиотеки). Чтобы не было конфликтов с другими библиотеками, каждое свойство или функция на клиентской стороне начинается с $. Так, например, удается избежать конфликтов идентификаторов (id) или часто распространенных имен функций (init).

14.2.8. Конфигурирование Jasp

Jasp конфигурируется с помощью собственной секции в файле web.config.

Также необходимо добавить HttpHadler и WebServer Hadler, чтобы ASP.NET начал обрабатывать запросы Jasp. Если параметры не определены, Jasp конфигурируется в зависимости от конфигурации сборки. Если сборка Jasp собрана в Debug режиме, параметры оптимизированы для отладки, если сборка собрана в Release режиме, то параметры оптимизированы для производительности. В табл. 11.3 перечислены параметры конфигурации, которые поддерживает Jasp.

Таблица 14.3. Параметры конфигурации Jasp

Название

Описание

Значение в Release

Значение в Debug

Тип

deployPath

Путь, относительный от корня сайта, куда "распаковывать" бинарные ресурсы сборки.

deploy

deploy

String

resourceFilter

Полное имя класса, который фильтрует все текстовые ресурсы, обрабатываемые Jasp.

Jasp.Resources.ResourceFilter, Jasp

Jasp.Resources.ResourceFilter, Jasp

String

gzipEnabled

Включен ли GZIP.

True

False

Boolean

watchResources

Включено ли слежение за изменением текстовых ресурсов.

False

True

Boolean

compressJavaScript

Включено ли сжатие JavaScript (удаление комментариев, лишних пробелов и т.п.).

True

False

Boolean

clientCaching

Включена ли отправка HTTP заголовков кэширования.

True

False

Boolean

indentHtml

Включено ли форматирование HTML.

False

True

Boolean

exceptionFormatter

Полное имя класса, занимающегося форматирование исключения в JSON-объект.

Jasp.Web.ExceptionFormatter, Jasp

Jasp.Web.ExceptionFormatter, Jasp

String

Параметр resourceFilter определяет класс, экземпляр которого будет заниматься фильтрацией текстовых ресурсов. Если нам нужно как-то отформатировать текстовый ресурс, например, удалить лишние пробелы или подменить ссылки, то можно создать класс, наследованный от класса Jasp.Resources.ResourceFilter и переопределять метод Filter(string name, StringBuilder data). Отфильтрованный ресурс впоследствии кэшируется. Для примера, переопределив этот параметр, можно производить замену путей в CSS-файлах библиотеки ExtJS автоматически, чтобы при обновлении этих файлов ничего не забыть.

Параметр exceptionFormatter используется для указания класса, экземпляр которого форматирует исключение при RPC-вызовах в JSON-объект. Если вам необходимо при возникновении исключения выводить дополнительные данные, например лог nHibernate, то это без труда можно сделать, переопределив метод Format класса Jasp.Web.ExceptionFormatter.

Узнав, что все ресурсы в Jasp должны быть embedded resource, многие думают, что для вступления в силу изменений в HTML, CSS или в JavaScript необходимо перекомпиляция проекта. За это отвечает параметр watchResources. Если он установлен в True, то Jasp следит за ресурсами, и при изменении автоматически их "подхватывает".