Вопрос очень простой, но в основном те решения, которые я встречал сводились к созданию второго сайта. Один был рабочий, а когда его надо было обновить включали второй сайт, а первый тушили. Еще был вариант с модулем, который по ключу в конфиге включался или выключался и показывал соответствующую страницу maintenance mode.
В asp.net 2.0 появился способ сделать это удобно и красивей. Вам нужно просто создать файл с названием app_offline.htm (именно так, по другому работать не будет) и положить его в корень своего сайта, после этого asp.net будет обрубать все новые запросы, а старые нормально отработаю до очередного нового.
Когда вы закончите обновлять сайт, просто переименуйте файл или удалите его и все заработает.
По умолчанию, если размер app_offline файла меньше 512 кб, то IE будет показывать friendly error page.
Очень удобно, удачи.
понедельник, 22 марта 2010 г.
понедельник, 15 марта 2010 г.
Доделал Tomcat F14-A
На днях закончил очередную модель Tomcat F14-A (modelist). Сама модель достаточно хорошо исполнена, глубокие прорези, подгонять детали напильником особо не пришлось. Также хочется отметить качество декалей, не рвутся, накладываются легко. Единственная проблема, это то, что декали которые шли в комплекте не понятно к какой эскадрильи относятся, обычно на килях черепа или пегасы (каталог dragon 2008).
В общем я доволен, даже меняется стреловидность крыла, прикольно :)
среда, 3 марта 2010 г.
Как подружить ASP.NET AJAX Control контекст c функциями jQuery?
Когда вы пишите AJAX Enabled контролы, то в JS классе для обращения к внутренним свойствам, функциям и тп. вы используете 'this'. При использовании jQuery, при вызове метода ставиться контекст элемента, для которого вы вызываете функцию. Например в each если обратится к this, то получите текущий элемент итератора. Также используя jQuery UI, события которые срабатывают в плагинах, вызываются в контексте элемента. В общем обработчик выглядит так (для примера с draggable плагином):
Для решения нам главное пропихнуть контекст AJAX класса. Использую Function.createDelegate мы не выкрутимся, т.к. он заменят контекст вызова, в нашем случае в обработчике this будет не элемент, над которым мы отпускаем мышь, а AJAX класс и мы никак не узнаем куда дропать.
Для того чтоб пропихнуть контекст не заменяя его, нам нужен Function.createCallback. Сигнатура такая же, только смысл другой, мы не заменяем контекст, а передаем параметр не изменяя контекст. Теперь в обработчике будет добавляться параметр, который мы передаем:
$('.accept-siblings,.accept-children').droppable({ accept: 'li.leaf-draggable' , greedy: true , tolerance: 'pointer' , drop: this._onDropHandler , over: this._onDragOverHandler , out: this._onDragOutHandler }); _onDropHandler: function(event, ui) { // this - будет элемент, над которым мы отпускаем мышь. // к внутренним членам вашего ajax класса обратиться не получится. }
Для решения нам главное пропихнуть контекст AJAX класса. Использую Function.createDelegate мы не выкрутимся, т.к. он заменят контекст вызова, в нашем случае в обработчике this будет не элемент, над которым мы отпускаем мышь, а AJAX класс и мы никак не узнаем куда дропать.
Для того чтоб пропихнуть контекст не заменяя его, нам нужен Function.createCallback. Сигнатура такая же, только смысл другой, мы не заменяем контекст, а передаем параметр не изменяя контекст. Теперь в обработчике будет добавляться параметр, который мы передаем:
this._onDropCallback = Function.createCallback(this._onDropHandler, this); $('.accept-siblings,.accept-children').droppable({ ... , drop: this._onDropCallback }); _onDropHandler: function(event, ui, context) { // this - так и остается элементом над которым мы отпускаем мышь // к членам AJAX класса можно обращаться через context. Например context.get_element(); }
Подписаться на:
Сообщения (Atom)