<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Блог маленького, но очень отважного программиста</title>
	<atom:link href="http://xo66ut.ru/feed" rel="self" type="application/rss+xml" />
	<link>http://xo66ut.ru</link>
	<description>PHP, MySQL, Javascript, JQuery, ExtJS, UML, и другие интернетости...…</description>
	<lastBuildDate>Thu, 29 Jul 2010 06:50:19 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Анонсирован Ext JS 3.3 Beta</title>
		<link>http://xo66ut.ru/archives/469</link>
		<comments>http://xo66ut.ru/archives/469#comments</comments>
		<pubDate>Thu, 29 Jul 2010 06:43:39 +0000</pubDate>
		<dc:creator>Xo66uT</dc:creator>
				<category><![CDATA[ExtJS]]></category>
		<category><![CDATA[Sencha]]></category>
		<category><![CDATA[Новости]]></category>
		<category><![CDATA[Component]]></category>
		<category><![CDATA[Ext.grid]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://xo66ut.ru/?p=469</guid>
		<description><![CDATA[В этом релизе сделано более 160 багфиксов и сделано несколько полезных компонентов.
PivotGrid.

&#8220;Первый компонент, который мы хотели бы представить это PivotGrid. Это компонент является инструментом обобщения данных, он идеально подходит для удобной организации больших объемов данных. PivotGrid поможет вам и вашим пользователям суммировать данные любого количества полей, а также легко разбить даннные, например, по параметрам город, [...]]]></description>
			<content:encoded><![CDATA[<p>В этом релизе сделано более 160 багфиксов и сделано несколько полезных компонентов.</p>
<h3>PivotGrid.</h3>
<p style="text-align: center;"><a href="http://sencha.com/deploy/ext-3.3-beta1-6976/examples/pivotgrid/simple.html"><img class="aligncenter" src="http://www.sencha.com/blog/wp-content/uploads/2010/07/pivotgrid.png" alt="PivotGrid" width="250" height="154" /></a></p>
<p>&#8220;Первый компонент, который мы хотели бы представить это PivotGrid. Это компонент является инструментом обобщения данных, он идеально подходит для удобной организации больших объемов данных. PivotGrid поможет вам и вашим пользователям суммировать данные любого количества полей, а также легко разбить даннные, например, по параметрам город, год квартал. Посмотрите на пример по ссылке, там мы суммируем данные о продажах. PivotGrid легко интегрируются в уже существующие магазины, а создаются всего с помощью нескольких строк кода. Мы создали ряд примеров, демонстрирующих различные возможности компонента. Вот небольшой пример как можно создать таблицу из примера.&#8221;</p>
<p><strong>Личное мнение</strong>: Акцентрируется внимание на том, что компонент работает с большими объемами данных, но в примере компонент грузит данные довольно продолжительное время, отсюда возникает вопрос, а есть ли заявленный profit ?</p>
<pre class="brush: jscript;">
var pivotGrid = new Ext.grid.PivotGrid({
    title     : 'PivotGrid example',
    store     : myStore,
    aggregator: 'sum',
    measure   : 'value',

    leftAxis: [
        {dataIndex: 'person',  width: 80},
        {dataIndex: 'product', width: 90}
    ],

    topAxis: [
        {dataIndex: 'year'},
        {dataIndex: 'city'}
    ]
});
</pre>
<h3>Компонент Календарь.</h3>
<p style="text-align: center;"><a href="http://sencha.com/deploy/ext-3.3-beta1-6976/examples/calendar/index.html"><img class="aligncenter" src="http://www.sencha.com/blog/wp-content/uploads/2010/07/calendar.gif" alt="Компонент Calendar" width="250" height="184" /></a></p>
<p>&#8220;Многие разработчики просили нас сделать официальную поддержку компонента Calendar. Календари это открытый вопрос: Есть много способов их реализации и много функций, которые можно добавить. Мы рады вам представить новый компонент для отображения событий за день, неделю и месяц, все они представлены в примере компонента. Также как и с компонентом PivotGrid, новый компонент Calendar предназначен для работы с уже готовым набором данных, что означает легкую интеграцию с уже существующим кодом. Мы пока не включили компонент Calendar в ext-all.js, но включили рабочие версии этих компонентов в examples/calendar директории SDK.&#8221;</p>
<p><strong>Личное мнение</strong>: по функционалу календарь пока значительно уступает проприетарному компоненту sheduler, но решение по разработке собственного компонента, очень хороший шаг, его не хватало.</p>
<h3>Еще кое-что.</h3>
<p style="text-align: center;"><a href="http://sencha.com/deploy/ext-3.3-beta1-6976/examples/grid/array-grid.html"><img class="aligncenter" src="http://www.sencha.com/blog/wp-content/uploads/2010/07/actioncolumn.gif" alt="ActionColumn" width="250" height="159" /></a></p>
<p>&#8220;В дополение к этим двум компонентам в новой версии в Grid появился новый тип столбца ActionColumn. В этом типе столбцов рисуются иконки, к которым можно приписать любые функции для манипуляции с Grid. Например, как показано в примере, на двух кнопках работают функции покупки \ продажи. Как и в предыдущий версиях, обратная совместимость является для нас приоритетной задачей. Для нормальной работы нового компонента PivotGrid были внесены изменения в GridView, который, как известно, являлся причиной некорректного поведения в некоторых ситуациях, но все эти проблемы буду исправлены в финальной версии.&#8221;</p>
<p><em>Источник <a href="http://www.sencha.com/blog/2010/07/28/announcing-ext-js-3-3-beta-pivotgrids-calendars-and-more/" target="_blank">http://www.sencha.com/blog/2010/07/28/announcing-ext-js-3-3-beta-pivotgrids-calendars-and-more/</a></em></p>
<img src="http://xo66ut.ru/?ak_action=api_record_view&id=469&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://xo66ut.ru/archives/469/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Javascript сокращения для уменьшения кода</title>
		<link>http://xo66ut.ru/archives/427</link>
		<comments>http://xo66ut.ru/archives/427#comments</comments>
		<pubDate>Mon, 21 Jun 2010 12:01:21 +0000</pubDate>
		<dc:creator>Xo66uT</dc:creator>
				<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://xo66ut.ru/?p=427</guid>
		<description><![CDATA[
Для языка Javascript очень важно количество байт кода &#8211; это напрямую влияет на производительность. Во многом из-за этого, как я думаю, придумано множество сокращений. Также эти сокращения записи, позволяют сделать код более читабельным и писать его быстрее.
Инкремент/Декремент/Умножение/Деление
Вместо:

growCount = growCount + 1;
shrinkCount = shrinkCount - 1;

Намного проще и красивей написать:

growCount ++;
shrinkCount --;

Для сложения\вычитания\умножения\деления

growCount += 100; //увеличиваем [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter size-full" style="border: 0pt none;" title="javascript_shorteners" src="http://xo66ut.ru/wp-content/uploads/2010/06/javascript_shorteners.jpg" alt="" width="300" height="300" /></p>
<p>Для языка Javascript очень важно количество байт кода &#8211; это напрямую влияет на производительность. Во многом из-за этого, как я думаю, придумано множество сокращений. Также эти сокращения записи, позволяют сделать код более читабельным и писать его быстрее.<span id="more-427"></span></p>
<h2>Инкремент/Декремент/Умножение/Деление</h2>
<p>Вместо:</p>
<pre class="brush: jscript;">
growCount = growCount + 1;
shrinkCount = shrinkCount - 1;
</pre>
<p>Намного проще и красивей написать:</p>
<pre class="brush: jscript;">
growCount ++;
shrinkCount --;
</pre>
<h3>Для сложения\вычитания\умножения\деления</h3>
<pre class="brush: jscript;">
growCount += 100; //увеличиваем переменную growCount на 100
shrinkCount -= 2; //уменьшаем переменную shrinkCount на 2

moreCount *= 5; // умножаем переменную moreSweets на 5
lessCount /= 3; // делим переменную lessApple на 3
</pre>
<h2>Условный оператор.</h2>
<p>Следующая конструкция, знакомая многим из других языков программирования экономит сразу несколько строк кода. Было:</p>
<pre class="brush: jscript;">
if(myAge &gt; legalAge) {
    canDrink = true;
}
else {
    canDrink = false;
}
</pre>
<p>Стало:</p>
<pre class="brush: jscript;">
var canDrink = (myAge &gt; legalAge) ? true : false;
</pre>
<h2>Заполнение ассоциативного массива.</h2>
<p>Многие привыкли делать это следующим образом:</p>
<pre class="brush: jscript;">
var language = new Array();
language['Language Name'] = 'Javascript';
language['Type'] = 'Object-oriented';
language['Framework'] = 'jQuery';
language['Other'] = 'Improve Usability';
</pre>
<p>Javascript же предлагает следующую конструкцию:</p>
<pre class="brush: jscript;">
var language = {
    'Language Name' : 'Javascript',
    'Type' : 'Object-oriented',
    'Framework' : 'jQuery',
    'Other' : 'Improve Usability'
};
</pre>
<h2>Значение переменной по умолчанию.</h2>
<p>Вместо много-строковой конструкции:</p>
<pre class="brush: jscript;">
function displayValues(limit) {
    var length;
    if(limit) {
        length = limit;
    } else {
        length = 10;
    }
}
</pre>
<p>Можно просто написать:</p>
<pre class="brush: jscript;">
function displayValues(limit) {
    var length = limit || 10;
}
</pre>
<p>Если функции не было передан параметр <em>limit</em>, то <em>length </em>будет равен значению по умолчанию &#8211; <strong>10</strong><br />
Для того, чтобы переменная <em>length </em> получила значение <strong>10</strong> должны быть выполнены следующие условия <em>limit </em>=</p>
<ul>
<li>false</li>
<li>0</li>
<li>null</li>
<li>undefined</li>
<li>empty string</li>
</ul>
<p>Во всех остальных случаях переменная <em>length </em> будет равна переменной <em>limit </em>.</p>
<p>Продолжение следует&#8230;</p>
<img src="http://xo66ut.ru/?ak_action=api_record_view&id=427&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://xo66ut.ru/archives/427/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Борьба с cache Flash&#8217;a в Internet Explorer</title>
		<link>http://xo66ut.ru/archives/437</link>
		<comments>http://xo66ut.ru/archives/437#comments</comments>
		<pubDate>Fri, 18 Jun 2010 07:41:46 +0000</pubDate>
		<dc:creator>Xo66uT</dc:creator>
				<category><![CDATA[ActionSript]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Программирование на Flash]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[ActionScript3]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://xo66ut.ru/?p=437</guid>
		<description><![CDATA[
Когда мы отправляем на сервер запрос одной и той же структуры и с одними и теми же параметрами, он кешируется, поэтому когда нам нужно запросить новую порцию данных по этому же url, браузер говорит flash, что эти данные у него уже есть и запроса на сервер не делает. Это относительно распространенная проблема с кешированием в [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align:center;"><img class="size-full wp-image-439 aligncenter" style="border: 0pt none; text-align: center;" title="ie_cache" src="http://xo66ut.ru/wp-content/uploads/2010/06/ie_cache.jpg" alt="" width="300" height="300" /></p>
<p>Когда мы отправляем на сервер запрос одной и той же структуры и с одними и теми же параметрами, он кешируется, поэтому когда нам нужно запросить новую порцию данных по этому же url, браузер говорит flash, что эти данные у него уже есть и запроса на сервер не делает. Это относительно распространенная проблема с кешированием в Internet Explorer. У меня она возникла при написании чата, требования к чату были такими, что можно было использовать только flash (только он помогает победить same-origin-policy), нужно было отправлять запросы к домену отличному от текущего. Подробнее о чате напишу как-нибудь в другой раз, про все эти политики безопасности и ограничения, и что предлагает flash для решения этих проблем. Итак, как исправлять ?!</p>
<h2>Flash.</h2>
<p>Решение в принципе лежит на поверхности, подобным пользуются не только в flash, это распространенный способ избежать кеширования в браузере. Мы просто добавляем уникальный параметр в запрос. В данном примере я использую timestamp через метод класса Date() &#8211; date.getTime(), который передаю в качестве параметра key в запросе.</p>
<pre class="brush: jscript;">

var request:URLRequest = new URLRequest(&quot;http://domain.ru/chat_receive.php&quot;);
var variables:URLVariables = new URLVariables();
 var date:Date = new Date();
 variables.key = date.getTime();

 request.data = variables;
 request.method = URLRequestMethod.GET;
</pre>
<p>Важно передавать параметры через URLVariables, первый раз я просто добавил параметры прямо в строку url &#8220;http://domain.ru/chat_receive.php&#8221;, почему-то IE это не очень понравилось, и он все равно все успешно кешировал.</p>
<h2>Back-end.</h2>
<p>Теперь делаем фикс на back-end, у меня это PHP, но реализации для других языков отличается не существенно. Зачем мы это делаем ? Способ который помог избежать проблемы, не отключает кеширование, то есть информация все равно попадает в кеш, и теперь ее на порядки больше. Для того чтобы не забивать кеш браузера, мы ставим в заголовок параметр Expires. А также отдаем в заголовке параметры, что кешировать не надо (в отличие от других браузеров ie этого не слушается, для этого мы и передавали уникальный параметр). Вот что у нас получилось:</p>
<pre class="brush: php;">
header(&quot;Expires: Mon, 26 Jul 1997 05:00:00 GMT&quot;); // disable IE caching
 header(&quot;Last-Modified: &quot; . gmdate( &quot;D, d M Y H:i:s&quot;) . &quot; GMT&quot;);
 header(&quot;Cache-Control: no-store, no-cache, must-revalidate&quot;); // HTTP/1.1
 header(&quot;Pragma: no-cache&quot;); // HTTP/1.0
</pre>
<p>Все Internet Explorer побежден.</p>
<img src="http://xo66ut.ru/?ak_action=api_record_view&id=437&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://xo66ut.ru/archives/437/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>ExtJS теперь Sencha</title>
		<link>http://xo66ut.ru/archives/432</link>
		<comments>http://xo66ut.ru/archives/432#comments</comments>
		<pubDate>Thu, 17 Jun 2010 10:35:46 +0000</pubDate>
		<dc:creator>Xo66uT</dc:creator>
				<category><![CDATA[ExtJS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Sencha]]></category>
		<category><![CDATA[JQuery]]></category>

		<guid isPermaLink="false">http://xo66ut.ru/?p=432</guid>
		<description><![CDATA[Ext JS + jQTouch + Raphaël = Sencha

&#8220;Интересные вещи происходят! сегодня мы объединяем силы с проектами jQTouch и Raphaël, а также меняем имя домена проекта с extjs.com на sencha.com. Эти проекты лидируют в своих областях и мы рады видеть в своих рядах их создателей Девида Канеду и Дмитрия Барановского. Мы считаем, что это сотрудничество приведет [...]]]></description>
			<content:encoded><![CDATA[<h2>Ext JS + jQTouch + Raphaël = Sencha</h2>
<p style="text-align:center;"><img class="aligncenter size-full wp-image-433" title="ext_js-sencha" src="http://xo66ut.ru/wp-content/uploads/2010/06/ext_js-sencha.jpg" style="border: 0" alt="" width="383" height="265" /></p>
<p>&#8220;<em>Интересные вещи происходят! сегодня мы объединяем силы с проектами jQTouch и Raphaël, а также меняем имя домена проекта с extjs.com на sencha.com. Эти проекты лидируют в своих областях и мы рады видеть в своих рядах их создателей Девида Канеду и Дмитрия Барановского. Мы считаем, что это сотрудничество приведет к впечатляющим результатам. &#8230; Sencha эт0 новое название нашей компании, а также разновидность япоского зеленого чая (</em>Так вот он какой стратегический напиток ExtJS разработчика ?!<em>). </em></p>
<p><em>Развитие Ext JS, Ext GWT, Designer, Direct и остального будет продолжаться, думаем только над переименованием Ext JS Designer на Sencha Designer. Одним из преимуществ переименования для нас является то, что мы разделяем названия компании и продукта. </em></p>
<p><em>Проекты jQTouch и Raphaël так и останутся под лицензией MIT. Мы создаем Sencha Labs подразделение, которое будет заниматься торговыми марками и авторскими правами всех некоммерческих проектов связанных с Sencha. Мы также рады сообщить, что Джонатан Старк известный разработчик мобильных приложений и автор двух книг под редакцией O’Reilly станет руководителем jQTouch (Добро пожаловать на борт Джонатан)</em>&#8221; &#8211; вот такое сообщение получили зарегистрированные на форуме Ext JS, позже оно было опубликовано и на сайте.</p>
<p>Что можно ожидать от объединения ? Я думаю только хороших новых результатов. jQTouch это jQuery плагин для разработки под мобильные девайсы типа iPhone, iPad и прочие «forward-thinking» девайсы. Как поможет эта библиотека в развитии Ext JS пока соевершенно не ясно. А Raphaël это крутая штука для разработки векторной графики под веб. Подключение этого проекта позволит модифицировать компоненты для построение графиков и диаграмм Ext JS, которые сейчас работают с помощью Flash.</p>
<p>Есть также мнение, что переименование связано с тем, что из компании ушел ее основатель Джек Слокум, или вся команда разработчиков ушла от него в новую компанию Sencha. Вот что пишут про это на сайте: &#8220;<em>После интенсивной работы над развитием ExtJS, за последние 18 месяцев  Джек стремительно прекратил свое участие. Хоть он и может вернуться на  некоторых условиях, мы желаем ему всего наилучшего.</em>&#8221;</p>
<p>В любом случае, что же действительно будет дальше покажет время.</p>
<img src="http://xo66ut.ru/?ak_action=api_record_view&id=432&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://xo66ut.ru/archives/432/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Работаем с Font API от Google</title>
		<link>http://xo66ut.ru/archives/409</link>
		<comments>http://xo66ut.ru/archives/409#comments</comments>
		<pubDate>Fri, 28 May 2010 07:01:08 +0000</pubDate>
		<dc:creator>Xo66uT</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Интересное в Сети]]></category>
		<category><![CDATA[Новости]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[userfriendly]]></category>
		<category><![CDATA[WEB 3.0]]></category>

		<guid isPermaLink="false">http://xo66ut.ru/?p=409</guid>
		<description><![CDATA[
Предлагаю разобраться, что нового и революционного предложила компания Google касательно шрифтов и как этим воспользоваться прямо сейчас. Во первых, как и множество других проектов компании, Font API является бесплатным и нет никаких сложностей, почему бы не начать использовать этот инструмент прямо сейчас.
Введение.
В течение последних нескольких лет постоянно появлялись новые методы использования альтернативных шрифтов. Все чувствуют [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter size-full wp-image-418" title="google_font_api" src="http://xo66ut.ru/wp-content/uploads/2010/05/google_font_api.jpg" alt="" width="200" height="150" /></p>
<p>Предлагаю разобраться, что нового и революционного предложила компания Google касательно шрифтов и как этим воспользоваться прямо сейчас. Во первых, как и множество других проектов компании, Font API является бесплатным и нет никаких сложностей, почему бы не начать использовать этот инструмент прямо сейчас.<span id="more-409"></span></p>
<h2>Введение.</h2>
<p>В течение последних нескольких лет постоянно появлялись новые методы использования альтернативных шрифтов. Все чувствуют подъем дизайна и юзабилити в веб, развитие сервисов и облачных приложений, все это ведет за собой и увеличение требований к типографике. Ограничение стандартным набором шрифтов, мешает развитию веб-дизайна в расширяющемся в геометрической прогрессии вебе. Поэтому стали появляться такие платные сервисы как <strong>TypeKit </strong>и <strong>FontDeck</strong>. В будущем, наверное, будут пояляется и другие.</p>
<p>Однако если вы посмотрите на основные технологии веб HTML, CSS, Javascript, PHP, все они являются бесплатными. Исходя из этого можно предположить, что вебу нужен эффективный, а главное бесплатный инструмент. Поэтому, то что предлагает нам Google наиболее подходящее в настоящее время решение для развития типографики в веб.</p>
<h2>Меняет правило игры ?</h2>
<p>Очевидно, что когда Google берется за что-нибудь, он делает это хорошо и меняет представление об этой отрасли. Так и со шрифтам, компания незаметно для всех выпустила (совместно с <strong>Typekit</strong>) <strong>Font API</strong>, который в долгосрочной перспективе изменит веб. Пока другие компании придумывают бизнес модели для подобных  сервисов, Google просто выпустили качественный бесплатный продукт.</p>
<p>Давайте посмотрим как это все работает на небольшом примере<a href="http://designshack.co.uk/tutorialexamples/GoogleFonts/index.html" target="_blank"> live demo</a>:</p>
<h2>HTML</h2>
<h2>Добавляем шрифты в Google Fonts API.</h2>
<p>Теперь когда мы поняли, как же все это работает, давайте добавим своих шрифтов, для этого перейдем к <a href="http://code.google.com/apis/webfonts/" target="_blank">Font Api</a> и посмотрим на <a href="http://code.google.com/webfonts" target="_blank">Каталог Шрифтов</a>. Здесь вы увидите различных 18 шрифтов. Каждый шрифт имеет несколько вариантов. Когда вы выберите тот, который вам нравится, просто нажмите на него, чтобы увидеть дополнительные параметры. Допустим выберем<strong> IM Fell</strong>.</p>
<p style="text-align: center;"><img class="size-full wp-image-416 aligncenter" title="Google_Font_API-1" src="http://xo66ut.ru/wp-content/uploads/2010/05/Google_Font_API-1.jpg" alt="" width="510" height="408" /></p>
<p>Когда вы увидите картинку с описание шрифта, просто нажмите на кнопку Get Code и вы увидите html код который нужно вставить в head страницы, а также пример css, как использовать новый шрифт.</p>
<p><a href="http://xo66ut.ru/wp-content/uploads/2010/05/Google_Font_API-2.jpg"><img class="aligncenter size-full wp-image-417" title="Google_Font_API-2" src="http://xo66ut.ru/wp-content/uploads/2010/05/Google_Font_API-2.jpg" alt="" width="510" height="204" /></a></p>
<p>Есть два способа вставки шрифта на сайт. Через html и через css @import.</p>
<h2>Через HTML</h2>
<pre class="brush: xml;">
&lt;link href='http://fonts.googleapis.com/css?family=IM+Fell+DW+Pica' rel='stylesheet' type='text/css'&gt;
</pre>
<h2>Через @import.</h2>
<pre class="brush: css;">
@import url(http://fonts.googleapis.com/css?family=IM+Fell+DW+Pica);
</pre>
<p>Далее мы можем использовать на сайте подключенный шрифт:</p>
<pre class="brush: css;">
&lt;div&gt;
&lt;div&gt;
&lt;pre&gt;#headline h1 {
	text-align: center;
	font-size: 8em;
	color: #111;
	text-shadow: 0px 2px 3px #555;
	font-family: 'IM Fell DW Pica', arial, serif;
}&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
</pre>
<p>Помимо этого, есть <strong>WebFont Loader</strong> инструмент, который представляет собой библиотеку <strong>Javascript</strong>, которая &#8220;дает вам больший контрль над шрифтом и позволяет использовать нескольких провайдеров для шрифтов&#8221; (в данном случае<strong> Font API</strong> &#8211; это провайдер шрифта, как и <strong>TypeKit</strong>) , это кстати их совместная разработка.</p>
<h2>Выводы.</h2>
<p>Наверное вы обратили внимание, насколько просто использование новых шрифтов с <strong>Google Font API</strong>. В отличие от существовавших до настоящего времени инструментов вам не нужно получать лицензию, которая прикрепляется к специально зарегистрированному доменному имени. Вы можете использовать шрифты даже в обычном примере, у вас на локальном компьютере.</p>
<p>Есть несколько преимуществ для выбора <strong>Google Font API</strong>, на которые стоит обратить внимание:</p>
<ul>
<li>Шрифт скачивается с сервера Google.</li>
<li>CDN Google быстрее чем ваш сайт.</li>
<li>От повсеместного использования шрифты будут кешироваться за счет того, что имеют одно расположение (сервер Google).</li>
</ul>
<p>Единственный видимый минус Font API, это небольшое количество шрифтов, но инструмент новый, и я думаю, количество доступных шрифтов будет со временем увеличиваться.</p>
<p>Источник: <a href="http://designshack.co.uk/articles/css/how-to-use-the-new-google-font-api" target="_blank">http://designshack.co.uk/</a></p>
<img src="http://xo66ut.ru/?ak_action=api_record_view&id=409&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://xo66ut.ru/archives/409/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>5 Распространенных мифов о Javascript</title>
		<link>http://xo66ut.ru/archives/383</link>
		<comments>http://xo66ut.ru/archives/383#comments</comments>
		<pubDate>Wed, 05 May 2010 11:36:39 +0000</pubDate>
		<dc:creator>Xo66uT</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Перевод]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[ООП]]></category>

		<guid isPermaLink="false">http://xo66ut.ru/?p=383</guid>
		<description><![CDATA[
Несмотря на то, что Javascript это один из самых популярных языков в мире, он до сих пор недооценивается и является непонятным для многих людей. Ситуация улучшилась в течении последних нескольких лет, но следующие мифы до сих пор блуждают по просторам web.
1. Javascript == Java
Разработчик из Соединенного Королевства (UK) Jeremy Keith, придумал такое определение этому мифу:
Java [...]]]></description>
			<content:encoded><![CDATA[<p><img style="padding: 10px; border: 0pt none;" title="javascript" src="http://xo66ut.ru/wp-content/uploads/2010/05/javascript.jpg" alt="Мифы о Javascript" width="320" height="194" /><br />
Несмотря на то, что Javascript это один из самых популярных языков в мире, он до сих пор недооценивается и является непонятным для многих людей. Ситуация улучшилась в течении последних нескольких лет, но следующие мифы до сих пор блуждают по просторам web.<span id="more-383"></span></p>
<h2>1. <strong>Javascript</strong> == Java</h2>
<p>Разработчик из Соединенного Королевства (UK) <em>Jeremy Keith</em>, придумал такое определение этому мифу:</p>
<blockquote><p><strong>Java </strong>это такой же <strong>Javascript</strong>, как <strong>ham</strong> (ветчина) и <strong>hamster </strong>(хомяк).</p></blockquote>
<p>Схожи только имена, но <strong>Java </strong>и <strong>JavaScript </strong>не связаны между собой.  Есть целый ряд поверхностных сходств, но такие же сходства можно найти и в других любых двух языках, имеющих C-подобный синтаксис.</p>
<p>Первоначально язык <strong>Javascript </strong>назывался <strong>Mocha</strong>, в какой-то момент стал <strong>LiveScript</strong>, и наконец стал называться <strong>Javascript </strong>в тот момент, когда язык <strong>Java </strong>был провозглашен спасителем жизни, вселенной и всего остального. Название всего лишь маркетинговых ход компании <strong>Netscape </strong>и ничего более.</p>
<h2>2. <strong>Javascript </strong>&#8220;игрушечный&#8221; язык.</h2>
<p>Часть &#8220;script&#8221; в названии языка, создаем обманчивое впечатление, что это урезанная, макро версия <strong>Java. </strong>Это не так. Во всяком случае, популярные &#8220;фичи&#8221; <strong>JavaScript,</strong> такие как <strong>замыкания </strong>и <strong>лямбда-функции </strong>в настоящее время оказали влияние на другие языки, такие как <strong>PHP</strong>, <strong>C#</strong> и наконец сам <strong>Java</strong>.</p>
<p><strong>Javascript </strong>наиболее часто встречается в виде встроенного в браузер интерпретатора, но это не означает, что он менее мощный в отличие от компилируемых языков программирования.</p>
<h2>3. <strong>Javascript </strong>есть только в браузерах.</h2>
<p>Большинство людей используют <strong>Javascript </strong>в качестве языка встроенного в браузер, но его (как и другие языки основанные на стандарте ECMAScript ) можно найти во многих других местах, таких например как:</p>
<ul>
<li>Браузер <strong>Mozilla Firefox</strong> и почтовый клиент <strong>Thunderbird </strong>используют <strong>Javascript </strong>для некоторых прикладных процессов.</li>
<li><strong>Flash ActionScript</strong> основан на<strong> Javascript.</strong></li>
<li><strong>PDF </strong>файлы могут содержать встроенный <strong>Javascript</strong>.</li>
<li>Множество десктоп виджетов от <strong>Microsoft </strong>и <strong>Apple </strong>используют <strong>Javascript</strong>.</li>
<li><strong>OpenOffice.org</strong> обеспечаивает поддержку <strong>Javascript</strong>.</li>
<li><strong>webOS</strong>, используемый в мобильных устройствах <strong>Palm</strong>, применяет <strong>Javascript</strong>, как язык для приложений.</li>
<li><strong>Javascript </strong>может быть использован для создания приложений в <strong>Gnome </strong>и в качестве скриптового языка в <strong>Windows</strong>.</li>
</ul>
<p><strong>Javascript </strong>пока не имеет полноценной серверной реализации, хотя несколько десятков хороших реализаций существует. День, когда мы сможем использовать <strong>Javascript </strong>и для серверной и для клиентской части когда-нибудь наступит, но непонятно, как скоро.</p>
<h2>4. <strong>Javascript</strong> до сих пор не отлажен и имеет множество багов.</h2>
<p>Эти дни давно уже стали преданием. Все производители браузеров соблюдают стандарт <strong>ECMAScript </strong>и очень редко можно встретить дополнительные фунции в <strong>Javascript</strong>.</p>
<p>Тем не менее реализация в браузерах не всегда одинакова: различные особенности манипуляции DOM объектами, особенности обработки событий, и причуды браузера могут доставить не мало головной боли при разработке. Это не вина самого языка, это проблема браузеров, через которые <strong>Javascript </strong> получает доступ к его, браузера, объектам.</p>
<h2>5. <strong>Javascript</strong> не Объектно-ориентированный язык.</h2>
<p>Путаница возникает оттого, что <strong>Javascript </strong>не<strong> </strong>использует привычные способы организации объектов. Отсутствие ключевого слово &#8220;<em>class</em>&#8221; заставляет разработчиков думать, что <strong>Javascript </strong>это функциональный язык программирования.</p>
<p><strong>Javascript </strong>предлагает модель прототипов. Это действительно потрясающе, вы можете писать, как функциональный код, так и организовывать код в классический объект с частными методами и свойствами.</p>
<p>Кроме того, все в <strong>Javascript </strong>является объектами, даже типы данных и функции. А как вам такое:</p>
<pre class="brush: jscript;">
var x = new Number(123);
var opp = &quot;oops&quot;.substr(0,3);
var f = function() { return function() { alert(&quot;hello!&quot;); }; };
</pre>
<p>Как насчет передачи функции в виде параметра:</p>
<pre class="brush: jscript;">
var Add = function(a, b) { return a + b; };
function Calculate(func, a, b) {
	return func(a, b);
}
var s = Calculate(Add, 1, 2); // s = 3
</pre>
<p>Или вы хотите расширить собственные типы ?</p>
<pre class="brush: jscript;">
// reverse any string
String.prototype.Reverse = function() {
	return this.split(&quot;&quot;).reverse().join(&quot;&quot;);
};
var h1 = &quot;Hello!&quot;;
var h2 = h1.Reverse(); // !olleH
</pre>
<p><strong>Javascript </strong>на первый взгляд может показаться непонятным, но вы поймете его элегантность и мощь, когда опять будете программировать на своем основном языке.</p>
<p>Вы все еще верите в эти мифы ?</p>
<p><em>Источник: <a href="http://www.sitepoint.com/blogs/2010/04/27/5-common-javascript-myths/" target="_blank">http://www.sitepoint.com/</a></em></p>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 349px; width: 1px; height: 1px; overflow: hidden;">JavaScript</div>
<img src="http://xo66ut.ru/?ak_action=api_record_view&id=383&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://xo66ut.ru/archives/383/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Динамическая загрузка файлов &#8211; AJAX Upload</title>
		<link>http://xo66ut.ru/archives/368</link>
		<comments>http://xo66ut.ru/archives/368#comments</comments>
		<pubDate>Fri, 30 Apr 2010 11:40:39 +0000</pubDate>
		<dc:creator>Xo66uT</dc:creator>
				<category><![CDATA[ExtJS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[userfriendly]]></category>

		<guid isPermaLink="false">http://xo66ut.ru/?p=368</guid>
		<description><![CDATA[
В размышлениях об интерактивности задавался мыслью как сделать удобный с точки зрения usability загрузчик файлов.  Плюс подогревал интерес к механизму работы ajax загрузчика в ExtJS. Делая однажды чат и разобравшись в ограничениях браузеров, узнал, что нет возможности отправлять файл по средством объекта xmlhttprequest. Поэтому было непонятно, как ExtJS uploader отправляет файлы, как будто делает это [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://xo66ut.ru/wp-content/uploads/2010/04/ajax_upload-e1272627550877.jpg"><img class="aligncenter size-full wp-image-376" title="ajax_upload" src="http://xo66ut.ru/wp-content/uploads/2010/04/ajax_upload-e1272627550877.jpg" alt="AJAX-Upload" width="543" height="282" /></a></p>
<p><a href="http://xo66ut.ru/wp-content/uploads/2010/04/ajax_upload-e1272627550877.jpg"></a>В размышлениях об интерактивности задавался мыслью как сделать удобный с точки зрения usability загрузчик файлов.  Плюс подогревал интерес к механизму работы <strong>ajax </strong>загрузчика в <strong>ExtJS</strong>. Делая однажды чат и разобравшись в ограничениях браузеров, узнал, что нет возможности отправлять файл по средством объекта <strong>xmlhttprequest</strong>. Поэтому было непонятно, как <strong>ExtJS </strong>uploader отправляет файлы, как будто делает это через <strong>ajax</strong>. Работая над созданием чата, я также ознакомиться с другими ограничениями браузеров, например на количество одновременных запросов к одному домену (ограничены двумя запросами), а также со всевозможными способами обхода этого ограничения. Там же для удобства применялся <strong>iframe </strong>транспорт, который позволяет отправлять обычные <strong>POST </strong>запросы через невидимый (0 px на 0 px) <strong>iframe</strong>. После этого мне сразу стал понятен механизм работы загрузчика файлов в <strong>ExtJS</strong>.<span id="more-368"></span></p>
<p>Решил добавить юзабильности в один из проектов и использовать этот способ для загрузки файлов, благо есть готовый плагин, называющийся <strong><a href="http://valums.com/ajax-upload/" target="_blank">AJAX Upload</a></strong>, хотя как я уже писал <strong>ajax </strong>тут не причем, все реализовано следующим образом:</p>
<ul>
<li> Плагин создает невидимый <strong>input </strong>над элементом, к которому вы привязываете нагрузку. То есть когда вы нажимаете на кнопку, появляется окно со стандартным выбором файла.</li>
<li>Затем когда вы выбираете файл плагин отправляет форму содержащую <strong>input </strong>с файлом через <strong>iframe</strong>.</li>
</ul>
<p><em>&#8220;Обычно для закачки файлов мы используем file input (&lt;input type=”file” /&gt;), его проблематично стилизовать. В современных веб приложениях этот input выглядит устаревшим. Можно конечно использовать для загрузки <strong>Flash</strong>, но <strong>Javascript </strong>прекрасно решает эту задачу. Плагин <strong>AJAX-Upload </strong>позволяет легко загружать несколько файлов без перезагрузки страницы. Он работает во всех браузерах и не требует никаких дополнительных библиотек для работы. К тому же он не затрагивает глобальных <strong>namespace</strong>&#8216;ов и прекрасно работает вместе с <strong>jQuery </strong>и <strong>Prototype</strong>.&#8221;</em></p>
<p>Работать с плагином довольно легко. Достаточно создать любой <strong>DOM </strong>элемент и привязать к нему плагин. Плагин отправляет файлы в виде обычного <strong>POST </strong>запроса. Поэтому можно обрабатывать их загрузку на любом серверном языке. На сайте плагина много работающий примеров. В плагине даже реализовано ограничение на расширения загружаемых файлов.</p>
<p>Распространяется плагин свободно под лицензией <strong>MIT</strong>.</p>
<img src="http://xo66ut.ru/?ak_action=api_record_view&id=368&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://xo66ut.ru/archives/368/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Проблема с анимацией в JQuery</title>
		<link>http://xo66ut.ru/archives/358</link>
		<comments>http://xo66ut.ru/archives/358#comments</comments>
		<pubDate>Wed, 28 Apr 2010 12:21:35 +0000</pubDate>
		<dc:creator>Xo66uT</dc:creator>
				<category><![CDATA[JQuery]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[JQuery animate]]></category>
		<category><![CDATA[userfriendly]]></category>

		<guid isPermaLink="false">http://xo66ut.ru/?p=358</guid>
		<description><![CDATA[Одной из главных особенностей JQuery является то, что эта библиотека позволяется вам легко подчеркнуть ваш дизайн, анимировав некоторые элементы. Речь идет об отображении элементов, их движении и изменении цветов. Первое часто используется для скрытия информации, такой например, как заголовки картинок, то есть по умолчанию они скрыты, а при наведении курсора они проявляются. Часто также этот [...]]]></description>
			<content:encoded><![CDATA[<p>Одной из главных особенностей JQuery является то, что эта библиотека позволяется вам легко подчеркнуть ваш дизайн, анимировав некоторые элементы. Речь идет об отображении элементов, их движении и изменении цветов. Первое часто используется для скрытия информации, такой например, как заголовки картинок, то есть по умолчанию они скрыты, а при наведении курсора они проявляются. Часто также этот эффект применяются для того чтобы показать информацию и рейтинг скриншота при наведении на него.<span id="more-358"></span></p>
<p>Есть частая проблема, точнее особенность JQuery, о которой часто забывают дизайнеры и разработчики, она заключается в том, что вся анимация на странице при вызове попадает в &#8220;стек&#8221;. Если у вас на странице есть множество элементов с анимацией, например фотографии в фотогаллерее, то когда пользователь быстро проведет по нескольким фотографиям и перестанет двигать мышью, он будет наблюдать как анимация появляется постепенно на каждом элементе. Наглядно эту проблему можно посмотреть на сайте <a href="http://druckbar.info/" target="_blank">druckbar</a>, если вы быстро проведете мышкой по четырем панелькам, то будете долго ждать пока в шапке появится соответствующие картинки.</p>
<p><a href="http://xo66ut.ru/wp-content/uploads/2010/04/jq_animate_stop.jpg"><img class="aligncenter size-full wp-image-364" title="jq_animate_stop" src="http://xo66ut.ru/wp-content/uploads/2010/04/jq_animate_stop.jpg" alt="Using JQuery animate stop" width="419" height="542" /></a></p>
<p>Вы можете решить эту проблему одним из следующих способ:</p>
<p>Использовать метод <strong>.stop(). </strong>Когда этот метод используется на элементе, он немедленно прекращает его анимацию, если конечно она есть. <strong> </strong></p>
<pre class="brush: jscript;">
$(&quot;ol#gallery li&quot;).hover(function () {
  $(&quot;.thumb-meta&quot;, this).stop().animate({ bottom: '0px' }, 400);
},
function () {
  $(&quot;.thumb-meta&quot;, this).stop().animate({ bottom: '-22px' }, 400);
});
</pre>
<p>Другой способ решить проблему со &#8220;стеком&#8221; анимации, это использовать плагины, например <a href="http://plugins.jquery.com/project/hoverIntent" target="_blank">hoverIntent</a>. Этот плагин делает анимацию доступной только, если пользователь двигает мышью достаточно медленно.</p>
<h2>Старайтесь не злоупотреблять с анимацией контента.</h2>
<p>Поскольку Javascript функции очень легко реализовать с помощью JQuery, многие увлекаются анимацией  и доставляют этим пользователю немало неудобств. Допустим, удобно использовать JQuery для подгрузки изображений по мере прокрутки текста, это позволяет быстро прогрузить страницу с множество картинок. Но зачем показывать эти изображения при помощи анимации ?! В этом нет никакаго смысла.</p>
<p>Поэтому, прежде чем анимировать, подумайте, не помещает ли анимация концентрации  пользователя на основном контенте. Анимация должна помогать пользователю, делать сайт более интерактивным, а не мешать ему работать с сайтом.</p>
<img src="http://xo66ut.ru/?ak_action=api_record_view&id=358&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://xo66ut.ru/archives/358/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Раширение классов в ExtJS</title>
		<link>http://xo66ut.ru/archives/275</link>
		<comments>http://xo66ut.ru/archives/275#comments</comments>
		<pubDate>Fri, 23 Apr 2010 07:12:51 +0000</pubDate>
		<dc:creator>Xo66uT</dc:creator>
				<category><![CDATA[ExtJS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Перевод]]></category>
		<category><![CDATA[Ext.extend]]></category>
		<category><![CDATA[xtype]]></category>

		<guid isPermaLink="false">http://xo66ut.ru/?p=275</guid>
		<description><![CDATA[Цель.
Давайте добавим функциональности к Ext.form.Combobox, сделаем так, чтобы перед каждым элементом списка отображалась иконка.

Давайте назовем наш плагин Ext.ux.IconCombo, а также зарегистрируем для него xtype iconcombo.

Создаем файлы.
Наш первый шаг заключается в том, чтобы подготовить файлы для нашего плагина.

iconcombo.html: HTML код приложения, которое будет содержать наш плагин. Чтобы сделать этот пример более простым, этот файл также будет [...]]]></description>
			<content:encoded><![CDATA[<h2>Цель.</h2>
<p>Давайте добавим функциональности к Ext.form.Combobox, сделаем так, чтобы перед каждым элементом списка отображалась иконка.<br />
<a href="http://xo66ut.ru/wp-content/uploads/2010/04/IconComboExt2.png"><img class="aligncenter size-full wp-image-346" title="IconComboExt2" src="http://xo66ut.ru/wp-content/uploads/2010/04/IconComboExt2.png" alt="ExtJS Combobox" width="175" height="97" /></a></p>
<p>Давайте назовем наш плагин <strong>Ext.ux.IconCombo</strong>, а также зарегистрируем для него <strong>xtype</strong> <strong>iconcombo</strong>.</p>
<p><span id="more-275"></span></p>
<h2>Создаем файлы.</h2>
<p>Наш первый шаг заключается в том, чтобы подготовить файлы для нашего плагина.</p>
<ul>
<li><strong>iconcombo.html</strong>: HTML код приложения, которое будет содержать наш плагин. Чтобы сделать этот пример более простым, этот файл также будет содержать Javascript код и CSS. В реальном приложении нужно хранить отдельно код и стили.</li>
<li><strong>Ext.ux.IconCombo.js: </strong>Javascript код нашего плагина.</li>
</ul>
<h2>iconcombo.html</h2>
<pre class="brush: xml;">
&lt;html&gt;
&lt;head&gt;
    &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot;&gt;
    &lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;../extjs-2.0/resources/css/ext-all.css&quot;&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;../extjs-2.0/adapter/ext/ext-base.js&quot;&gt;&lt;/script&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;../extjs-2.0/ext-all-debug.js&quot;&gt;&lt;/script&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;Ext.ux.IconCombo.js&quot;&gt;&lt;/script&gt;

    &lt;style type=&quot;text/css&quot;&gt;
    .ux-flag-us {
        background-image:url(../img/flags/us.png) ! important;
    }
    .ux-flag-de {
        background-image:url(../img/flags/de.png) ! important;
    }
    .ux-flag-fr {
        background-image:url(../img/flags/fr.png) ! important;
    }
    .ux-icon-combo-icon {
        background-repeat: no-repeat;
        background-position: 0 50%;
        width: 18px;
        height: 14px;
    }

    /* X-BROWSER-WARNING: this is not being honored by Safari */
    .ux-icon-combo-input {
        padding-left: 25px;
    }

    .x-form-field-wrap .ux-icon-combo-icon {
        top: 3px;
        left: 5px;
    }
    .ux-icon-combo-item {
        background-repeat: no-repeat ! important;
        background-position: 3px 50% ! important;
        padding-left: 24px ! important;
    }
    &lt;/style&gt;

    &lt;script type=&quot;text/javascript&quot;&gt;
Ext.BLANK_IMAGE_URL = '../extjs-2.0/resources/images/default/s.gif';
Ext.onReady(function() {
    var win = new Ext.Window({
        title:'Icon Combo Ext 2.0 Extension Class Example',
        width:400,
        height:300,
        layout:'form',
        bodyStyle:'padding:10px',
        labelWidth:70,
        defaults:{anchor:'100%'},
        items:[{
            xtype:'iconcombo',
            fieldLabel:'IconCombo',
            store: new Ext.data.SimpleStore({
                    fields: ['countryCode', 'countryName', 'countryFlag'],
                    data: [
                        ['US', 'United States', 'ux-flag-us'],
                        ['DE', 'Germany', 'ux-flag-de'],
                        ['FR', 'France', 'ux-flag-fr']
                    ]
            }),
            valueField: 'countryCode',
            displayField: 'countryName',
            iconClsField: 'countryFlag',
            triggerAction: 'all',
            mode: 'local'
        }]
    });
    win.show();
});
    &lt;/script&gt;
    &lt;title&gt;Icon Combo Ext 2.0 Extension Class Example&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Этот файл помимо html разметки содержит функцию фасад &#8211; <strong>onReady</strong>, которая создает окно с формой, а на ней единственный элемент наш iconcombo. Будьте внимательны, в этом примере реальной формы не создается (тега &lt;form&gt; нет). Хранилище (<strong>store</strong>) iconcombo содержит уже заполненые данные для тестирования.</p>
<p>Вам необходимо изменить пути к файлам ExtJS, если он установлен в другом месте.</p>
<p>Вам, возможно, также понадобится поменять пути к изображениям флагов.</p>
<h2>Ext.ux.IconCombo.js</h2>
<pre class="brush: jscript;">
// vim: ts=4:sw=4:nu:fdc=2:nospell
/**
  * Ext.ux.IconCombo Extension Class for Ext 2.x Library
  *
  * @author  Ing. Jozef Sakalos
  * @version $Id: Ext.ux.IconCombo.js 617 2007-12-20 11:29:56Z jozo $
  *
  * @class Ext.ux.IconCombo
  * @extends Ext.form.ComboBox
  */
Ext.ux.IconCombo = Ext.extend(Ext.form.ComboBox, {
    initComponent:function() {

        // call parent initComponent
        Ext.ux.IconCombo.superclass.initComponent.call(this);

    } // end of function initComponent
});

// register xtype
Ext.reg('iconcombo', Ext.ux.IconCombo);

// end of file
</pre>
<p>Первый шаг в расширении класса, это создание дополнения, которое не изменяет функциональности родительского класса. Таким образом мы можем быть уверены, что родительский класс отлично работает, и добавленный нами функционал не затронет его работу.</p>
<p>Javascript файл выше делает именно это.</p>
<h2>Теория.</h2>
<p>Чтобы расширить класс в ExtJS мы не должны создавать функцию-конструктор. Нам просто нужно присвоить значение возвращаемое функцией <strong>Ext.extend</strong> при ее вызове в нашем пространстве имен. <strong>Ext.extend</strong> получает в качестве аргументов родительский класс и конфиг (функционал расширения) в качестве второго аргумента, и возвращает наш класс-раширение.</p>
<p>Все что мы раньше делали в конструкторе в старых версиях Ext 1.x, теперь делается в методе <strong>initComponent</strong>, который мы перезаписываем в родительском классе. <strong>initComponent </strong>это метод-конструктор родительского класса.</p>
<p>Тем не менее метод <strong>initComponent </strong>родительского класса содержит полезный код, который должен быть выполнен. Вы можете посмотреть как мы вызываем метод <strong>initComponent </strong>родительского класса в приведенном выше коде. Модель вызова метода родителя, одинакова для все функции, которые мы переопределяем в классе.</p>
<p>Регистрации <strong>xtype </strong>для нашего расширения не является обязательной, но это очень удобно, вы можете вызывать расширение просто набрав несколько символов имени его <strong>xtype</strong>. То есть точно также, как показано в этом примере.</p>
<h2>Приступим.</h2>
<p>Пока все хорошо. Теперь если открыть <strong>iconcombo.html</strong>, вы должны увидеть стандартный <strong>combobox</strong> с тремя значениями и выбранной Германией. Пока конечно же никаких иконок.</p>
<p>Теперь пришло время поработать. Добавьте следующие строки в <strong>Ext.ux.IconCombo.js </strong>перед вызовом родительского метода <strong>initComponent</strong>:</p>
<pre class="brush: jscript;">
Ext.apply(this, {
            tpl:  '&lt;tpl for=&quot;.&quot;&gt;'
                + '&lt;divst0&quot;&gt;'{' + this.iconClsField + '}&quot;&gt;'
                + '{' + this.displayField + '}'
                + '&lt;/div&gt;&lt;/tpl&gt;'
        });
</pre>
<p>В этом коде мы переопределяем стандартные элементы <strong>combobox </strong>нашими, которые будут использовать css класс <strong>iconClsField.</strong></p>
<p>Отлично, готовы протестировать ? Обновите страницу, круто да ?</p>
<p>Замечательно у нас красивые значки при открытии списка, но мы также хотим видеть флаг, когда <strong>combobox </strong>закрыт, не так ли ?</p>
<p>Добавьте следующий код после окончания кода метода <strong>initComponent</strong>:</p>
<pre class="brush: jscript;">
onRender:function(ct, position) {
        // call parent onRender
        Ext.ux.IconCombo.superclass.onRender.call(this, ct, position);

        // adjust styles
        this.wrap.applyStyles({position:'relative'});
        this.el.addClass('ux-icon-combo-input');

        // add div for icon
        this.icon = Ext.DomHelper.append(this.el.up('div.x-form-field-wrap'), {
            tag: 'div', style:'position:absolute'
        });
    }, // end of function onRender

    setIconCls:function() {
        var rec = this.store.query(this.valueField, this.getValue()).itemAt(0);
        if(rec) {
            this.icon.className = 'ux-icon-combo-icon ' + rec.get(this.iconClsField);
        }
    }, // end of function setIconCls

    setValue: function(value) {
        Ext.ux.IconCombo.superclass.setValue.call(this, value);
        this.setIconCls();
    } // end of function setValue
</pre>
<p>Вызов события <strong>onRender </strong>сначала вызывает родительский метод <strong>onRender</strong>, а потом добавляет стили и div&#8217;ы с иконками.</p>
<p>Мы также добавляем метод <strong>setIconCls </strong>и перезаписываем родительский метод <strong>setValue. </strong>Конечно мы хотим, чтобы родительский метод <strong>setValue </strong>тоже выполнился, поэтому мы сначала вызываем его, а потом выполняем наш метод <strong>setIconCls.</strong></p>
<h2>Окончание.</h2>
<p>Теперь последние испытание: перезагрузите страницы. Если вы при копировании примера не сделали ошибок вы получили новое расширение <strong>Ext.ux.IconCombo</strong>. Конечно<strong> </strong>можно еще усовершенствовать наше расширение, но это только лишь пример, как раcширять классы в ExtJS.</p>
<h2>Окончательный код.</h2>
<p>Вот полный код того, что у нас получилось:</p>
<pre class="brush: jscript;">
// vim: ts=4:sw=4:nu:fdc=2:nospell
/**
  * Ext.ux.IconCombo Extension Class for Ext 2.x Library
  *
  * @author  Ing. Jozef Sakalos
  * @version $Id: Ext.ux.IconCombo.js 617 2007-12-20 11:29:56Z jozo $
  *
  * @class Ext.ux.IconCombo
  * @extends Ext.form.ComboBox
  */
Ext.ux.IconCombo = Ext.extend(Ext.form.ComboBox, {
    initComponent:function() {

        Ext.apply(this, {
            tpl:  '&lt;tpl for=&quot;.&quot;&gt;'
                + '&lt;divst0&quot;&gt;'{' + this.iconClsField + '}&quot;&gt;'
                + '{' + this.displayField + '}'
                + '&lt;/div&gt;&lt;/tpl&gt;'
        });

        // call parent initComponent
        Ext.ux.IconCombo.superclass.initComponent.call(this);

    }, // end of function initComponent

    onRender:function(ct, position) {
        // call parent onRender
        Ext.ux.IconCombo.superclass.onRender.call(this, ct, position);

        // adjust styles
        this.wrap.applyStyles({position:'relative'});
        this.el.addClass('ux-icon-combo-input');

        // add div for icon
        this.icon = Ext.DomHelper.append(this.el.up('div.x-form-field-wrap'), {
            tag: 'div', style:'position:absolute'
        });
    }, // end of function onRender

    setIconCls:function() {
        var rec = this.store.query(this.valueField, this.getValue()).itemAt(0);
        if(rec) {
            this.icon.className = 'ux-icon-combo-icon ' + rec.get(this.iconClsField);
        }
    }, // end of function setIconCls

    setValue: function(value) {
        Ext.ux.IconCombo.superclass.setValue.call(this, value);
        this.setIconCls();
    } // end of function setValue
});

// register xtype
Ext.reg('iconcombo', Ext.ux.IconCombo);

// end of file
</pre>
<p><em>Источник: <a href="http://www.extjs.com/learn/Tutorial:Extending_Ext2_Class" target="_blank">http://www.extjs.com/learn/Tutorial:Extending_Ext2_Class.</a></em></p>
<img src="http://xo66ut.ru/?ak_action=api_record_view&id=275&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://xo66ut.ru/archives/275/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Иерархия основных классов ExtJS</title>
		<link>http://xo66ut.ru/archives/336</link>
		<comments>http://xo66ut.ru/archives/336#comments</comments>
		<pubDate>Wed, 21 Apr 2010 15:56:26 +0000</pubDate>
		<dc:creator>Xo66uT</dc:creator>
				<category><![CDATA[Новости]]></category>
		<category><![CDATA[Component]]></category>
		<category><![CDATA[ExtJS]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://xo66ut.ru/?p=336</guid>
		<description><![CDATA[Схема иерархии основных классов в ExtJS. Стоит помнить, что если класс ExtJS не наследуется от Ext.Component, функция initComponent (Инициализатор компонента), не вызывается, таким образом код, который  вы напишете в этой функции никогда не будет выполнен. Вызов initComponent используется при создании больших приложений методом преднастроенных классов.
ExtJS классы которые не наследуются от Ext.Component не имеют строчки [...]]]></description>
			<content:encoded><![CDATA[<p>Схема иерархии основных классов в ExtJS. Стоит помнить, что если класс ExtJS не наследуется от <strong>Ext.Component</strong>, функция <strong>initComponent </strong>(Инициализатор компонента), не вызывается, таким образом код, который  вы напишете в этой функции никогда не будет выполнен. Вызов <strong>initComponent</strong> используется при создании больших приложений методом преднастроенных классов.</p>
<p>ExtJS классы которые не наследуются от <strong>Ext.Component</strong> не имеют строчки  <strong>this.initComponent();</strong> в своем исходном коде.</p>
<p style="text-align: center;">
<div id="attachment_338" class="wp-caption aligncenter" style="width: 453px"><a href="http://xo66ut.ru/wp-content/uploads/2010/04/Component_ierarchi_ExtJS.jpg"><img class="size-full wp-image-338 " title="Component_ierarchi_ExtJS" src="http://xo66ut.ru/wp-content/uploads/2010/04/Component_ierarchi_ExtJS.jpg" alt="Собственно схема классов основанных на Component." width="443" height="352" /></a><p class="wp-caption-text">Собственно схема классов основанных на Component.</p></div>
<img src="http://xo66ut.ru/?ak_action=api_record_view&id=336&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://xo66ut.ru/archives/336/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
