sumin

30

Upload: tfmailru

Post on 27-Jun-2015

5.020 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Sumin
Page 2: Sumin

Сайты в 2002 году

– мало javascript– независимость

Page 3: Sumin

Структура проекта

/js /common.js /editor.js

Page 4: Sumin

2005 год

/js

/common.js /editor.js /js-lib.js

Page 5: Sumin
Page 6: Sumin

Проблемы

– Путаница– Растущий размер файла– Нет code reuse

Page 7: Sumin
Page 8: Sumin

Логическое разделение

/js /folder.js /message.js /search.js ...

Page 9: Sumin

Проблемы

– Размер– Подключение– Сопровождение

Page 10: Sumin

Результат

<head> <script></script> <script></script> <script></script> …</had>

Page 11: Sumin

Тег как компонент

<div class="component" onclick="return {type:'folder'}"></div>

Page 12: Sumin

Тег как компонент

<div class="component" onclick="return {type:'folder'}"></div>

Page 13: Sumin

Нужен функционал

– Найти компонент– Определить компонент– Подключить JS файлы– Очередность подключения– Один файл один раз

Page 14: Sumin

Найти компонет

getElementsByCSSSelector('.component');

Page 15: Sumin

Старые браузеры

<div id=“random_12345”> … </div><script>create(“random_12345”)</script>

Page 16: Sumin

Тип компонента

<div class="component" onclick="return {type:'folder'}"></div>

var type = div.onclick().type;

Page 17: Sumin

Генерация тега script

createScript = function (src, charset){ script = document.createElement('script'); ... head.insertBefore(script, head.firstChild);}

Page 18: Sumin

require

require( // зависимость от других файлов ['file1', 'file2' ...], // уведомление о загрузке (callback) function(){ // инициализация loaded('file'); });

Page 19: Sumin

require дерево

Folders -> Dates -> Strings

Folders.jsrequire('Dates', function(){loaded('Folders')});Dates.jsrequire('Strings', function(){loaded('Dates')});Strings.js/* Strings staff */ loaded('Strings')

Page 20: Sumin

Запуск компонента

component = getElsBySelector('.component');type = component.onclick().type;

require( [getFileName(type)], function(){ window[type].init(); });

Page 21: Sumin

Тег как компонент

<div class="component" onclick="return {type:'folder'}"></div>

Page 22: Sumin

События

Page 23: Sumin

Календарь разработчика

Page 24: Sumin

Календарь заказчиков

Page 25: Sumin

Календарь заказчиков

Page 26: Sumin

Календарь заказчиков

Page 27: Sumin

События

CB.observe (type, listener, object);

CB.dispatch (type, object, event);

Page 28: Sumin

Очереди

CB.dispatch (type, object, event, 1);

CB.observe (type, listener, object);

Page 29: Sumin

Календарь заказчиков

Page 30: Sumin

Сумин АндрейРуководитель разработки клиентской части

[email protected]

СПАСИБО!