понедельник, 25 июля 2011 г.

Knockoutjs фреймворк

Недавно делал сложный интерфейс. В поисках серебряной пули, которая облегчит исполнение задачи, были перекопаны несколько фреймворков ( Sproutcore, Knockoutjs, MooTools, Ext4, YUI). Казалось, какой либо из них облегчит сильно задачу и выбор пал, как ни странно на Knockoutjs, который весьма молод. В теории и изготовлении Hello world примеров, нокаут конечно был эффективен и соблазнителен. Однако косяки, как обычно, начались потом. Ключевые моменты фреймворка:
- Декларативная привязка модели к UI.
Пишем модель
var Model = {
       sometext:"Hello world"
}
привязываем поле модели к узлу DOM.
 <span data-bind="text:sometext"></span>
в span появляется Hello world.
Удобно, черт возьми. Вот input.
<input data-bind="value:sometext"></span>
Тут мы можем уже менять значение поля sometext нашей модели.
Однако, если мы его поменяем изменения не отразятся в модели и соответственно в этом спане  <span data-bind="text:sometext"></span>.
- Взаимозависимость. Binding.
А вот если мы сделаем поле модели observable.
var Model = {
        sometext: ko.observable("Hello world")
}
Тогда после изменения в инпуте, значение в модели поменяется и отобразится в спане. Таким образом между спаном и инпутом есть некий байндинг, через модель. Изменяя значение поля объекта, изменения сразу же отображаются в UI. Смотрится красиво.
А если нам нужен какой то специфический контрол ? Например слайдер. Вот тут придется помучиться с созданием custom binding.
В конечном итоге наша модель байндится к нашей View( которая обычный html файл), ko.applyBindings(Model).
Предпочтительный способ создания модели через конструктор и new. При сложном интерфейсе придется создавать не одну модель, а вот байндить можно только одну. То есть основная модель служит как бы агрегатором для других. Тут же опять возникают определенные сложности ибо приходится создавать классы, конструкторы и прочие прелести ООП и  все это через призму примочек самого фреймворка.
Итог, каша в голове и вместо простого и легкого способа создать сложный интерфейс имеем кучу кода, который непонятно как работает.

среда, 20 июля 2011 г.

Менеджим аплликейшнс - таск планеры.

Все больше убеждаюсь хорошие планеры - платные. Точнее они были бесплатны, когда то в начале, но как только ими начинают активно пользоваться, халява накрывается.
Вот и недавно обнаружил Project bubble. Да можно попробывать 15 дней бесплатно, но данные по кредитке все равно заведите пож-та.
Однако есть и на нашей улице праздник в виде ClockingIT.
Крайне симпатичная вещь да ктому же и бесплатная. Пользуйтесь пока не прикрыли :)
p.s. А тут можно посмотреть еще с десятка два три платных и бесплатных версий.

Еще один Online IDE - ShiftEdit

Обнаружил неплохой online редактор ShiftEdit .
Однако при всех плюсах есть небольшой недостаток, если так можно выразиться. Редактор сохраняет файлы на ваш сервер, через ftp.
Cloud9ide, который я сейчас использую, сохраняет файлы в local storage броузера, html 5 фича. Далее проект можно перенести в git. По мне, такая модель более предпочтительна, с одной стороны работа с git и возможность забрать код в любой момент. Второе - версионность, а ShifEdit поддерживает пока что только svn .
Идеального IDE до сих пор я не нашел. Однако Cloud9 достаточно активно равзивается и возможно там будут какие то интересные решения. Пока редактор в ShiftEdit мне нравится больше.

понедельник, 18 июля 2011 г.

MooTools, пример использования MooTools More, библиотека Form

Инструмент для экспериментов JS Fiddle

Отличная вещь для экспериментов JS Fiddle.
- В HTML можно вставлять только управляющий div и ничего больше.
- Чистый код в javascript секцию без оберток в виде:
$(function(){})
Все примеры можно вставлять через удобный виджет. Например слайдер в jQuery. Не забудьте в ресурсах указать ссылку на css ui, можно взять из google cdn.