Показаны сообщения с ярлыком javascript. Показать все сообщения
Показаны сообщения с ярлыком javascript. Показать все сообщения

28 июня 2010

Старший onchange наблюдает за тобой

У dom элемента есть события. Среди них есть onchange. Если я делаю

var onchange = function() {/* do here something*/};

то не странно ли присобачивать эту функцию _ко всем контролам ввода_ на странице? Они вообще слышали про пространства имён? Или это умышленно так?

11 мая 2010

jqGrid custom date picker

Да, давно не писал, но это жизнь, которой мало, и работа, которой много. Вот по работе иногда приходится хлопать одной ладонью.

Так и на прошлой неделе - нужно было приделать к редактору модели в jqGrid свой элемент для редактирования дат, наподобие того, что генерят рельсы в ответ на select_date. Скудость документации и отсутствие толковых примеров и как следствие полдня экспериментов на пути к желаемому и стали причинами появления данного поста.

Для начала обратимся к истокам и объявим наше поле как custom, указав свои функции для создания элемента и извлечения значения из него.
{name:'v_birth', index:'v_birth',formoptions:{elmprefix:"* &nbsp"},edittype:'custom',editable:true,editoptions:{custom_element:dinput, custom_value:dvalue}}


Дальше немного JS магии.



Создаём, заполняем значениями с выбором одного из них, и возвращаем массивом три select'а и кнопку сброса.

Подразумевается, что в таблицу дата приходит в американском формате (mm-dd-yyyy), именно поэтому у меня поле называется v_birth - это виртуальный атрибут, в базе это естественно тип Date. О валидации таких атрибутов и их применении совместно с jqGrid стоит сказать, пожалуй, отдельно, своим постом.

Пользователь увидит три селекта и кнопку сброса их в начальное значение (--). Браузер - невалидный код (три селекта с одинаковым id), но промолчит. Функция извлечения значения благодаря этому увидит все три select'а, отмапит их в массив выбранных значений и склеит из него строку. Бэкенд - либо опять же дату в американском формате, либо пустую строку, если пользователь сбросил дату, либо неверную дату, и может сохранить, об NULL'ить или остановить валидацию на своё усмотрение.

И для завершения - ещё один штрих. Истоки.

...
.navGrid('#my_pager',
{edit:true,add:true,del:true,search:false,refresh:true},
{recreateForm:true, afterSubmit:function(r,data){return afterSubmit(r,data,'edit');}},
....
Обратите внимание на recreateForm:true. С этой опцией элемент будет создаваться каждый раз при открытии формы редактирования и устанавливать начальные значения из нужной модели, а не из первой, для которой он был вызван.
А теперь отмазки. JS код грязноват и неоптимален, но я иррационально не люблю JS. Кроме того, на самом деле я использую 2dcJqgrid Rails plugin, но уже сильно модифицированный (оригинал бы не позволил сделать описываемое), так что привожу JS код для создания таблицы.

Такие вот пироги. Надеюсь, юбилейная 200-я запись была вам полезна.

06 января 2008

Mix it

Довольно интересная точка зрения на будущее использования различных языков. Ola Bini, как и Microsoft, идут хоть и разными, но схожими путями, в то же время недавно три года исполнилось проекту, реализующему "полиглотную разработку" в родном руби окружении.
Мне кажется, это идеальный способ послать подальше всех холиворщиков и писать на том, на чём хочется и что больше подходит. Потому что в конце концов только один остаётся лишь в фильме горец, а языки плодятся и множатся, и одного идеального не будет никогда.

30 декабря 2007

Ещё про cut в blogger

Поскольку что-то там к нам мчится, решил сделать подарок всем пользователям блоггера и рассказать, как я реализовал сворачивание постов.
Зачем? Чтобы сворачивать очень длинные посты вроде моих статей из OpenSource
Почему не стандартное решение, которое предлагает google? Потому что это скучно, требует перезагрузки страницы, обрезает пост в rss, что есть позор для автора. К тому же у меня чесались руки попробовать jQuery.

Итак:

Пока что вариант работает только для расширенных шаблонов.

1. Для начала читаем тут, добавляем в шаблон внутрь тэга head такой код:
<script src='http://leonid.phoenix.googlepages.com/script4blogger.js' type='text/javascript'/>
<script src='http://jqueryjs.googlecode.com/files/jquery-1.2.1.pack.js' type='text/javascript'/>
<style>
<b:if cond='data:blog.pageType != "item"'>
.cut {display:none;}
<b:else/>
.cut {display: block;}
</b:if>
</style>
Ссылки на изображения прописаны в скрипте, подключаемом первой строчкой. Их можно изменить и выложить скрипт на те же google pages или любой другой хостинг.

2. Потом ищем строку <data:post.body/> и заменяем на
<b:if cond='data:blog.pageType != "item"'>
<div class='pxpostwrap' expr:id='data:post.id'>
<data:post.body/>
</div>
<b:else/>
<data:post.body/>
</b:if>

3. При написани поста сворачиваемый текст помещаем в такой тэг
<div class="cut" id="cut">
</div>

4. Если хотите отблагодарить - нарисуйте мне кнопку для скрытия - показа поста.
Happy blogging!

09 октября 2007

Cut в Blogger

Реализовал сворачивание длинных постов в Блоггере на манер ЖЖ (см. предыдущий пост). Не удержался от пижонских эффектов.