Вышла Derby 0.6.0-alpha3


    DerbyJs — реактивный фулстек javascript-фреймворк. О нем неоднократно писали на хабре — материалы по Derby. Буквально пару дней назад в репозитории Derby произошла смена основной ветки. Теперь версия 0.5 отошла на задний план, 0.6 — основная.

    Не в традициях команды разработчиков заниматься пиаром — изменения произошли тихо и незаметно. А что же поменялось?

    Что осталось, что поменялось


    Итак, полностью осталась без изменений та часть, которая касалось моделей и реактивных данных (racerjs, sharejs) — они были быстрыми и стабильными. Главными проблемами, с которыми боролись, были: медленная подсистема рендеринга, ее нестабильность, грязный код.

    Итак, на данный момент полностью переписана часть отвечающая за шаблонизацию и рендеринг. Значительно улучшена производительность. В проект добавлен форк esprimajs — теперь в шаблонах можно использовать любые выражения javascript. Код теперь понятней — система более масштабируема.

    Создана новая система компонент, по ней написана документация.

    Серверная лапша перенесена в отдельный модуль «derby-starter». Теперь приложения derby выглядят красиво и легковесно. Посмотрите один из переделанных примеров — directory.

    Несколько примеров кода


    Это всего-лишь несколько примеров, которые я по-быстрому выдернул, думаю много чего ускользнуло от моего внимания.

        /*Алиасы тепер через #, добавлен индекс массивов*/
        {{each _page.list as #todo, #index}}
          /*Вместо dervy:view - просто view*/
          <view name="todo"></view>
        {{/}}
    


      /*x-bind заменен 'on-' в качестве обработчика можно вставлять даже код на JS*/
      <button on-click="model.set('titleColor', this.name)">Select</button>
    


    {{each _page.people}}
      <tr>
        /*Вместо . на текущий скоуп указывает this - как-то более привычно и естественно*/
        <td><a href="/people/{{this.id}}">{{this.name}}</a></td>
        <td>{{this.phone}}</td>
        <td><a href="mailto:{{this.email}}">{{this.email}}</a></td>
        <td><a href="http://twitter.com/{{this.twitter}}">{{this.twitter}}</a></td>
        <td>{{this.gender}}</td>
      </tr>
    {{/}}
    


    // Вместо app.fn - теперь app.proto, но это конечно декоративный момент
    // главное, это то, что у каждой компоненты свой скоуп, и свои обработчики
    app.proto.cancel = function() {
      app.history.back();
    };
    


    Todo-пример с компонентами


    <Body:>
      <view
        name="todos-new"
        on-submit="list.add()"
        label="Add todo"
        autofocus>
      </view>
      <view
        name="todos-list"
        as="list"
        items="{{_page.items}}">
      </view>
    
    <todos-new:>
      <form on-submit="submit()">
        <input type="text" value="{{value}}" placeholder="{{@placeholder}}" autofocus="{{@autofocus}}">
        <button type="submit">{{@label}}</button>
      </form>
    
    <todos-list:>
      <ul>
        {{each @items as #item, #i}}
          <li>
            <input type="checkbox" checked="{{#item.checked}}">
            {{#item.text}}
            <button type="button" on-click="remove(#i)">Delete</button>
          </li>
        {{/each}}
      </ul>
    


    app.component 'todos-new', class TodosNew
      submit: ->
        value = @model.del 'value'
        @emit 'submit', value
    
    app.component 'todos-list', class TodosList
      add: (text) ->
        @model.push 'list', {text}
      remove: (index) ->
        @model.remove 'list', index
    


    P.S.
    За последние пару дней шестая версия в спринтерском темпе перебежала с 1 по 3 альфа-версии. В ближайшее время ожидаем беты.

    P.P.S
    Всем кому интересно советую посмотреть примеры из репозитория derby-examples — они полностью переработаны под новую версию.
    Поделиться публикацией

    Похожие публикации

    Комментарии 17

      0
      А когда будет исчерпывающая документация и туториалы?
        0
        Доки ждёмс от Нэйта, боюсь не осилю. После этого туториалы и faq наваяю. Так же хочу всякие модули, примеры на 0.6 переписать. Stay tuned.
          0
          А чем derby отличается от meteor?
            0
            Пока узнал, что поддержкой npm и генерацией html на сервере. Больше ничего ключевого не нашёл.
              0
              Просто любопытно пошли ли в прок метеору те инвестиции, и ушел ли он далеко от конкурентов, таких как дерби.
                +1
                Пошли. Хотя бы потому, что они тратят кучу денег на маркетинг и на привлечение комьюнити.
                  +1
                  Ну нас с вами прагматическая сторона вопроса интересует, а не болтология.
                    0
                    Ну так комьюнити пишет туториалы, cоздает компоненты. Я лично смотрю и туда и туда, но в продакшен выпускаю пока только Derby-приложения. Хотя, в моем случае это, наверное, больше случайность (присоединился к проекту, который уже делали на Derby).
              0
              Ну, например, еще тем, что в derby используется OT-object transformation, технология разрешения конфликтов при одновременном редактировании рессурсов (как в google docs). Можно легко, почти из коробки сделать, например, редактор кода, в котором одновременно могут менять код несколько человек.

              Ну а так в основном идеологические отличия.
          +2
          Насколько Derbyjs пригоден для продакшена? Так же как и Meteorjs? Нужно как раз выбрать технологию для личного кабинета с тяжелым интерфейсом в одном интересном проекте, мне очень по душе derby и meteor, судя по демо…
            0
            Используем в продакшене. Экономические игры для университетов америки, австралии, индии. Вполне себе работает — держит нагрузки.
              +1
              А аутентификация, авторизация, ограничение доступа к полям документа нужны? (-:
                +1
                Аутентификация, авторизация есть (derby-pasport). Разграничение доступа тоже, но только на всю коллекцию целиком (нельзя накладывать разные ограничения на разные поля).
                  0
                  derby-passport последний коммит 6 месяцев назад, его или не развивают, или ждут 0.6, или забили, примеры не рабочие )-:
                  До сих пор жду от Павла обещанных статей на эту тему с работающими примерами (-:

                  Из-за этих всех маленьких неприятностей, отравляющих комфорт кодинга, ушёл в сторону метеора. Может с выходом 0.6 ситуация изменится, и следующий проект буду писать на derby
                0
                >> Нужно как раз выбрать технологию для личного кабинета с тяжелым интерфейсом в одном интересном проекте, мне очень по душе derby и meteor, судя по демо

                Берите, что больше знаете — и делайте. Я бы сейчас — derby 6 взял, но это потому что в последнее время пишу на Derby и очень радует красота 6-ой версии.
                +1
                Спасибо за пост, но, долго пытался понять
                … конечно декаративный момент
                главное, это то, что у каждой…

                Вы имели в виду декларативный или декоративный?
                  +1
                  Простите за опечатку — декоративный.

                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                Самое читаемое