суббота, 30 июня 2012 г.

Как кешировать селекторы для обработчиков событий



// antipattern
$('.list-item').click(function () {
 $('.photo').hide();
});


// preferred
var photo;
$('.list-item').click(function () {
 photo = photo || $('.photo');
 photo.hide();
});
http://shichuan.github.com/javascript-patterns/ https://github.com/shichuan/javascript-patterns/blob/master/jquery-patterns/cache-selector.html

Делегирование с помощью .live()

Чтобы понять что такое .live(), достаточно показать, что является его эквивалентом:

$(selector).live(events, data, handler);                // jQuery 1.3+
$(document).delegate(selector, events, data, handler);  // jQuery 1.4.3+
$(document).on(events, selector, data, handler);        // jQuery 1.7+

empty(), remove(), detach() - что? куда? и почему?

.empty() -- уничтожает детей элемента в обвертке jquery, у которого вызывают этот метод.
.remove() -- вынимает из дом-дерева элемент, при этом все события и данные нацепленные джейквери на него и его детей сразу же удаляются.
.detach() -- этот товарищ самый интересный, он вынимает элемент из дом-дерева, но ни данные ни события из этого сегмента не уничтожаются, он подходит для тех случаев, когда мы вынимаем элемент временно. Мы можем вынять впринципе и ремувом, если нам ни данные, ни события на под-дереве не важны.

Вот применения последнего для продуктивности манипуляции с дом-деревом:

var table = $('#some-table');
var parent = table.parent();

table.detach();
table.addLotsAndLotsOfRows();
parent.append(table);

Свойство context у объектов jquery

$ob.context - если при выборке контекст не был указан, то это document, если же был указан, то он.

closest

.closest - метод, который аналогичный .parents потому что идет по дереву вверх, но:
- начинает тестить с себя, ;
- как только находит подходящий элемент останавливается, парентс же проходит к самому корню собрав все узлы, а потом отфильровывает элементы по селектору, первым в массиве находится ближайший родитель.

Тестирование алгоритмов работы с массивами

По началу на двух первых тестах даже расстроился - думал фигня вообще и не стоит заморачиваться как работать с массивами, но последний, который считается лучшим, поистине оказался лучшим)

И так тестировал на Winodws 7 64bit Home Pre RU, Sony Vaio VPCEJ i5, 8 гб ОЗУ

классный сайт с патернами джаваскрипта

четверг, 28 июня 2012 г.

Как победить назойливый кеш в лайфрее?

Проследить чтобы стояло свойство:


com.liferay.portal.servlet.filters.cache.CacheFilter=false

вторник, 26 июня 2012 г.

Как проинициализировать статический обьект несколькими методами если поле статическое

static List headerNames = new ArrayList();

static {
   headerNames.add("title");
   headerNames.add("description");
   headerNames.add("user-name");
   headerNames.add("modified-date");
}

пятница, 22 июня 2012 г.

Ленги в портлете и js

Чтобы js Liferay.Language.get('lang.var.name') посталяло ленги контекста портлета нам нужно сделать следующее. Дело в том, что аяксом эти переменные придут только в случае если ленги в контексте ROOT.
Чтобы получать ленги из портлета, нужно чтобы скрипт был в отдельном js файле, так на него применится фильтр LanguageFilter, который поменяет все функции обращения к серверу за ленгами в скрипте на значения ленгов.

Только вот обязательно, чтобы в portlet.xml было указанно, что в портлете ленги:
...
 localization/language
....

воскресенье, 17 июня 2012 г.

Разница между разными инклюдами jsp

Взято из форума лайфреяhttp://www.liferay.com/community/forums/-/message_boards/message/14327817:

<%@include%>
Is the jsp include directive. The content of the file you are including is added at translation time. Eg. when the JSP file is compiled. So any code in the include is treated exactly as when had it been written inline in the jsp that does the include

<jsp:include>
Is the jsp include tag. The contents of the path you are including are added at request time. You can also parameterize the request that's made by nesting jsp:param elements in this tag. You can only include paths that are relative to your servlet context (eg. in your own war file)

<liferay-util:include>
Is the liferay inlude tag, afaik its kind of like jsp:include but let's you include files from other servlet contexts then your own, via it's servletContext attribute or portletId. 
Make sure you have in portal-ext.properties
    theme.jsp.override.enabled=true
"liferay-util:include" tag checks this value in Liferay v.6.1.0 CE GA1...

And then there's a bunch of others also related to including, you did not mention yet. Like and . What you should use depends on the situation.



суббота, 16 июня 2012 г.

Состав директории репозитория в Windows

Все библиотеки, которые размещены в центральных репозиториях мавена, лежат по своим папкам, внутри в папке может содержаться еще папки версий. Сама же папка репозитория состоит из следующих файлов:

1. _maven.repositories - метафайл (тут я так понимаю детализируется на каком из удаленных цетральных репозиториев обитает этот артифакт).
2. библиотеки.jar - скомпиленная либа.
3. библиотеки.pom - дескриптор проекта.
4.  библиотеки-сорцы.jar - сорцы

5. библиотеки.jar.sha1
6. библиотеки.pom.sha1
7.  библиотеки-сорцы.jar.sha1


Последние это ключи для ssh соединения с удаленными репозиториями откуда и пришел данный в локальную машину.

Еще могут быть файлы с именами 2,3,4 и их расширениями + постфикс .lastUpdated. Это текстовые файлы в которых находится дата попыток загрузок и урлы из которых были неудачные попытки загрузки, последний походу будет удачный, или неудачный, если нет артифакта рядом со своим файлом ластапдейт. В случае если не загрузился ресурс то бедет еще и пустой файл с постфиксом .jar-not-available.


Файл настроек мавена

Живет этот файл в двух вариантах в двух местах:
$M2_HOME/conf/settings.xml
${user.home}/.m2/settings.xml
Первые глобальные с ними мерджатся настройки конкретного юзера и последние перегружают те же значение предыдущего.

 В нем находятся настройки не касающиеся конкретного проекта и которые часто не должен видеть внешний мир. Это:
- расположение локального репозитория (интрасеть),
- расположение альтернативных удаленных серверов (я так понимаю если центральные по какой-то причине не доступны),
- аутентификационная информация.


Вот общая структура файла:
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                      http://maven.apache.org/xsd/settings-1.0.0.xsd">
  <localRepository/>
  <interactiveMode/>
  <usePluginRegistry/>
  <offline/>
  <pluginGroups/>
  <servers/>
  <mirrors/>
  <proxies/>
  <profiles/>
  <activeProfiles/>
</settings>
activeProfiles тег указывает какие из указанных в profiles теге, являются всегда активными, активные профили перегрузят профилям конкретного проекта с такими же айшками как у них значения совпадающих параметров. Проектные профили размещают в pom.xml или profiles.xml

понедельник, 11 июня 2012 г.

Как в виндоусе из виндоус екплорера запустить cmd

Зажимаем шифт и вызываем контекстное меню на папке, которая будет поточной в открывшемся cmd

воскресенье, 10 июня 2012 г.

Eclipse Plugin for Velocity templates engine

http://veloeclipse.googlecode.com/svn/trunk/update/ - добавить этот урл и инсталировать с него

среда, 6 июня 2012 г.

Устанвка хотдеплея в еклипсе через мавен

Чтобы мавен проект начал работать с хотдеплоем ресурсов в еклипсе нужно выполнить мавен-цель mvn -Dwtpversion=2.0 eclipse:eclipse.

Потом этот проект либо открыть екслипсом, липо переоткрыть и обязательно запустить как ран-сервер в нужном сервере. После этого изменения в джееспе и яваскриптах с цсс после сохранения в IDE будут сразу прилетать на сервер.

WTP - webbased tools projects, это группа плагинов еклиспса, которые позволяют хотдеплойи


Походу вот оно что делает, создает файл в каталине:
 tomcat-6.0.29\conf\Catalina\localhost\edetailing-admin-portlet.xml
А поэтому файлу каталина при запуске прослушивает указанный класс в своем контексте, и по каким-то там наверно событиям реагирует и обновляет содержимое указанного приложения.

Вот что внутри:
<?xml version="1.0" encoding="UTF-8"?>
<Context docBase="F:\wksps\eDetailing\bundles\tomcat-6.0.29\webapps\edetailing-admin-portlet" reloadable="true" source="org.eclipse.jst.jee.server:edetailing-admin-portlet"/>

Встраивание портлета в тему

Можно встраивать как инстансебл портлет, так и нонинстансебл. Во втором случае проще в том плане, что не нужно добалвлять суфикс _INSTANCE_ + айди инстанции.

Вот пример для инстансебл, как более сложного варианта:

#set ($VOID = $velocityPortletPreferences.setValue('display-style', '1'))
#set ($VOID = $velocityPortletPreferences.setValue('portlet-setup-show-borders', 'false'))
#set ($instanceId = 'E3j7')
#set ($queryString = "param1=value1¶m2=value2")
#set ($myPortletId = "73_INSTANCE_${instanceId}")
#set $theme.runtime($myPortletId, $queryString, $velocityPortletPreferences.toString())
#set ($VOID = $velocityPortletPreferences.reset())
Кодовое слово $VOID позволяет то что возвращает метод не выводить в ответ сервера, заглатывать это в "черную дыру".

пятница, 1 июня 2012 г.

Полезные ссылки в Liferay

Ссылка на портлет логина -- home?p_p_id=58&p_p_lifecycle=0&p_p_state=maximized&p_p_mode=view&saveLastPath=0&_58_struts_action=%2Flogin%2Flogin