Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.11.2011, 11:24
Аватар для oblomov86
Интересующийся
Отправить личное сообщение для oblomov86 Посмотреть профиль Найти все сообщения от oblomov86
 
Регистрация: 24.02.2011
Сообщений: 17

Организация js-кода на странице
На клиенте нужно организовать сложное взаимодействие между элементами. Обычно я использую для работы с DOM jquery. Но порой код выглядит весьма уродливо и непонятно. Как правильно организовывать клиентский код, какие подходы можно для этого применять?

Последний раз редактировалось oblomov86, 16.11.2011 в 11:27.
Ответить с цитированием
  #2 (permalink)  
Старый 16.11.2011, 13:14
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

MVC - вряд ли что то придумаешь лучше.


Обычно всегда полезно отделять представление от логики.

Представление размести в шаблоне, и используй шаблонизатор.

Логику в контролёре.

модели по вкусу, для сложного взаимодействия с сервером, или общих данных для нескольких контролёров. В остальных случаях модели чаще усложняют жизнь. К примеру модели полезны если у тебя есть два контролёра панель управления графиком, и график. Оба контролёра будут использовать общие данные, эти общие данные вполне разумно вынести ещё в одну сущность - модель, там же можно разместить методы для работы с этими данными (сохранение на сервер, загрузка с сервера, удаление данных, посдсчёт значений покаким нибудь формулам и т.д.)

// примерный вид возможного контролёра
controller.extend("horizont",{
       // опции
       options: {
        greetings: "Hello"
       },
       // конструктор
       init:function(el){
            el.append("привет");
       },

       // нажали кнопку ok
       "button#ok click":function(){
       }
       // нажали кнопку cancel
       "button#cancel click":function(){
       }
}

// создаём контроллёр как любой виджет.
$("#test").horizont({
       greetings:"astala vista"
});


такими контролёрами можно контролировать как часть (вроде меню или слайдера), так и всю страницу.

Или даже большое приложение, глобальный контролёр aplication может по необходимости подгружать по ajax страницы, на эти страницы он будет вешать контролёр page, page в свою очередь может повесить контролёры на элемены которые превратят их в слайдеры, карусели и другие динамические элементы.

самым простым контролёром можно считать виджет из jquery ui,
создаём мы его при помощи команды widget.
К нему возможно есть смысл самому прикрутить шаблонизатор типа ejs или аналогичного.

Есть и более серьёзные решения.

Я уж наверное всех заколебал этой штукой, но напомню ещё раз
есть фреймворк базирующийся на jQuery, позволяющий организовывать код в стиле mvc.
http://www.javascriptmvc.com/

Другие mvc фреймворки вроде blackbone.js, не заточены под jQuery, но это не значит что их нельзя использовать в связке с jQuery.

писать на jquery это не обязанность
вместо него можно использоват extJs или dojo
Инструменты для организации кода, в них уже существуют.
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 16.11.2011 в 14:27.
Ответить с цитированием
  #3 (permalink)  
Старый 16.11.2011, 15:18
Аватар для oblomov86
Интересующийся
Отправить личное сообщение для oblomov86 Посмотреть профиль Найти все сообщения от oblomov86
 
Регистрация: 24.02.2011
Сообщений: 17

DjDiablo,
Спасибо, буду врубаться.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ищу приличный редактор кода под JS Universe Общие вопросы Javascript 28 30.10.2012 18:30
Вывод кусков HTML кода с одного файла JS wlad2 Общие вопросы Javascript 16 04.01.2011 11:52
Рациональность JS кода. Илюшенций Общие вопросы Javascript 3 25.08.2010 13:02
Грамотная организация кода trasher Общие вопросы Javascript 10 04.02.2010 16:26
Загрузка дополнительного js кода с сервера Anonymous2008 Общие вопросы Javascript 5 20.11.2008 12:33