Оглавление
- Введение
- II. Задний план
- III. Давайте построим Trello Clone!
- Шаг 0: Начало работы
- Шаг 1: Управление билетами на доске
- Шаг 2: Добавление списка и функциональность билета
- Шаг 3: время тестирования
- Шаг 4: Добавление некоторого прохлады – Drag & Drop
- Внутри Давайте посмотрим на наши окончательные результаты
- V. Кодирование Trello Clone: добавление дополнительных функций
Введение
Простые списки дел отлично подходят для отслеживания задач, которые вам нужно выполнить. Но если вы работаете с командой, где задачи имеют подзадачи, которые имеют подпунистые задачи и многое другое, именно поэтому вам особенно нужно программное обеспечение для управления проектами. Приложения для управления проектами, даже простые такие, как Trello, могут разбить ваш проект на достижимые шаги и предоставить вашу команду более управляемым рабочим процессом.
II. Задний план
В этом руководстве показано, как написать систему Trello-Alke Ticking с царапин, чтобы помочь вам построить аналогичный инструмент управления проектами самостоятельно. На каждом этапе мы рассмотрим минимальные требования к жизнеспособным продуктам и внедряем их.
Мы будем использовать Trello в качестве вдохновения, поскольку это очень простое, но мощное. Для целей этого учебника мы создадим простой версию приложения.
Стек, который мы будем использовать, это средний стек Mongo, Express, Angularjs и Node.js. Средний стек не имеет особого преимущества по сравнению с другими технологиями, поэтому выбор этой технологии – это просто мой личный вкус. Но вот некоторые причины, по которым я предпочитаю эти технологии:
A. Node.js.
- Он имеет большой механизм зависимости. Это относительно, а не глобальные – как в файловой системе, так и в пути. Это означает:
- Вы можете иметь несколько версий одного и того же кода в одном проекте, что делает зависимости гораздо более стабильными.
- Вы можете легко упаковать свой код ».
- Очень легко опубликовать свой код на использование библиотеки Micro. Это, в свою очередь, значит, есть много кода, вы можете использовать для Node.js. Это также означает, что вы можете легко отделить свой код в небольшие библиотеки.
- Сочетается с NVM (диспетчер версии узла), что означает, что вы можете легко иметь несколько версий узла на вашем компьютере.
- Он имеет большой стек утилит для среды развития.
- Nodemon и Lite Server Auto Обновите свой процесс после изменения кода. Это, в свою очередь, ускоряет ваш процесс разработки – помните, что нет компиляции!
- Bower организует ваши внешние зависимости (и мне все еще нравится, хотя NPM может заменить его ).
- Сценарии NPM – это очень мощный способ добавить функциональность в вашу среду разработки. Мне очень полезно иметь Nodejs в любом проекте, не говоря уже о том, что язык.
- Это свет. Мне нравится тот факт, что я могу запустить Node.js на микрочти в Amazon.
- Это асинхронный по природе. Это делает его очень подходящим технологией для веб-серверов.
- Объединяется с электроном, мы можем легко опубликовать носный клиент в наше приложение.
B. Express.
Espress – это очень прямая библиотека, которая помогает организовать код вашего сервера.
C. Mongo.
Mongo очень хорошо играет с Node.js, и его схема меньше природы делает развитие очень легко, особенно когда вы начинаете проект.
D. угловой
- Это полная рамка для интерфейса. Не нужно интегрировать несколько библиотек.
- Я думаю, что он едва имеет какую-либо кривую обучения, которую я никогда не понимал тех, кто сказал иначе.
- Он отделяет HTML от JavaScript, который мне нравится.
E. Они все JavaScript!
- JavaScript потрясающий.
- Это язык сценариев, и поэтому вы видите результаты сразу после записи кода.
- Он работает на двигателях, написанных крупнейшими компаниями и использовал всех, используя браузер.
- Один язык для всех сред.
III. Давайте построим Trello Clone!
Шаг 0: Начало работы
Чтобы добраться до начала, давайте будем использовать Проект леса Это включает в себя базовую угловую установку и бэкэнд.
Шаг 1: Управление билетами на доске
Для первого шага давайте решим предположить
- одна доска со списками и билетами
- Нет пользователей, нет сотрудничества
A. Создайте страницу «Доска»
Во-первых, давайте настроим представление доски, которое позволяет пользователям добавлять списки и билеты. Для этого мы определим страницу в угловании:
// file : app.js angular.module('demo', ['ngRoute']).config(function ($routeProvider) { console.log('configuring') $routeProvider .when('/board', { controller: 'BoardPageCtrl', templateUrl: '/app/views/board_page.html' }); })
Затем мы определим контроллер с некоторыми данными издевательства, которые мы можем отобразить
// file : BoardPageCtrl.js angular.module('demo').controller('BoardPageCtrl', function ($scope) { $scope.lists = [ { name: 'list 1', tickets: [ {title: 'task 1'}, {title: 'task 2'} ] }, { name: 'list 2', tickets: [ {title: 'task 3'}, {title: 'task 4'} ] } ] })
Как видите, я выбрал очень наивную модель данных со следующими чертами:
- У меня есть массив списков.
- У каждого списка есть имя и его билеты.
- У каждого билета есть титул.
Хотя эта модель может измениться в будущем, мне слишком рано рассмотреть что-нибудь более сложное. Когда я думаю о первой функциональности, которую я хотел бы добавить, что является Crud (создавать, чтение, обновление, удаление) для списков и билетов,
Когда я думаю о первой функциональности, я хотел бы добавить что-то, что известно как Crud (создание, чтение, обновление, удаление) для списков и билетов. Я убежден, что эта модель достаточно, поэтому давайте двигаться дальше.
Время добавить вид на отображение списков и билетов.
Для начала мы хотели бы увидеть, что все правильно подключено. Поэтому я начну с простой страницы:
Мы еще не закончили функциональность, поскольку кнопка «Добавить билет» еще ничего не делает. Но прежде чем мы движемся с функциональностью, я хотел бы, чтобы все выглядели потрясающе.
D. Добавление цвета и макета
До сих пор все выглядит ужасно. Так что пришло время добавить немного стиля. Чтобы проектировать организованный, давайте создадим файл с именем _board_page.scss
(Обратите внимание на соглашение об именах, которую я сохраняю), и я начинаю его с идентификатором страницы.
#boardpage{ }
Давайте начнем с добавления цвета фона доски:
$BOARD_BACKGROUND_COLOR: #5BA4CF; background:$BOARD_BACKGROUND_COLOR;
Цвета имеют тенденцию быть повторно использованными. Поэтому я предпочитаю держать его в переменной. Я думаю, что это тоже более читаемо.
Теперь я хочу, чтобы на заднем плане не был все на странице. Я мог бы использовать Ширина: 100%
и Высота: 100%
Но у этого есть некоторые другие последствия, которые мы хотим избежать. Так вместо этого я предпочитаю использовать Абсолютация
Отказ Это также разрешит некоторые прокрутки по поводу проживания по дороге.
$BOARD_PAGE_PADDING:0px; position:absolute; top:$BOARD_PAGE_PADDING; bottom:$BOARD_PAGE_PADDING; left:$BOARD_PAGE_PADDING; right:$BOARD_PAGE_PADDING;
Далее давайте сделаем списки горизонтальные – один рядом с другой.
.list{ display:inline-block; }
Теперь давайте поведем название правильно и добавить фон в списки с некоторым интервалом:
.list{ display:inline-block; $LIST_BACKGROUND_COLOR: #D2D7E5; background:$LIST_BACKGROUND_COLOR; width:300px; padding:10px; &:not(:first-child){ margin-left:10px; } .list-name{ padding:10px; border:none; background:transparent; } }
Давайте также добавлю прокладки на #boardpage
с прокладки: 20px;
Обратите внимание, что я использовал Маржа-левый
Чтобы провести расстояние между списками, но когда я хотел интервал со страницы, я добавил прокладку на странице.
Я мог бы добавить Margin-Top
в списках и Маржа-левый
на левый ребенок
достичь того же.
Причина, по которой я решил реализовать ее таким образом, является то, что если я когда-либо добавил что-нибудь еще на странице, я могу отдохнуть, чтобы она будет соответствовать спискам правильно. Альтернатива заставила меня добавлять поля несколько раз к каждому элементу, которую я добавлю в будущее.
Говоря, что это то, что приложение должно выглядеть в этой точке
Теперь давайте стиль кнопку
.add-ticket{ $ADD_TICKET_BACKGROUND_COLOR:linear-gradient(to bottom,#61BD4F 0,#5AAC44 background:$ADD_TICKET_BACKGROUND_COLOR; color:white; font-weight: bold; border:none; padding:10px; } .list-content { margin-bottom:20px; }
Давайте добавим немного стиля на каждый билет:
.ticket{ background:white; &:not(:first-child) { margin-top: 10px; } .ticket-title{ width:100%; padding:20px; } }
Я проигнорировал первый ребенок, когда добавил маржу, потому что мне не нравится, когда расстояние между двумя элементами на странице представляет собой сумму двух стилей. В таком случае:
прокладка
На названии спискаMargin-Top
На билете
Я также хочу избежать возможности того, что расстояние между названием и первым билетом, а расстояние между билетами как-то связано. Мы хотим быть в состоянии изменить один без другого.
Вам может быть интересно, почему я такой дотошный со стилем. Причина в том, что я нахожу гораздо сложнее для обнаружения регрессий стиля, чем регрессионные функциональные возможности, в основном до того, как первое сложно проверить автоматически. Таким образом, обращая внимание на небольшие детали и приобретение передовой практики с CSS сэкономит вам много времени по дороге.
Это последний SCSS
файл
#boardpage{ $BOARD_BACKGROUND_COLOR: #5BA4CF; background:$BOARD_BACKGROUND_COLOR; $BOARD_PAGE_PADDING:0px; position:absolute; top:$BOARD_PAGE_PADDING; bottom:$BOARD_PAGE_PADDING; left:$BOARD_PAGE_PADDING; right:$BOARD_PAGE_PADDING; padding:20px; .list{ display:inline-block; $LIST_BACKGROUND_COLOR: #D2D7E5; background:$LIST_BACKGROUND_COLOR; width:300px; padding:10px; .list-content { margin-bottom:20px; } &:not(:first-child){ margin-left:10px; } .list-name{ padding:10px; border:none; background:transparent; } .add-ticket{ $ADD_TICKET_BACKGROUND_COLOR:lineargradient(to bottom,#61BD4F 0,#5AAC44 background:$ADD_TICKET_BACKGROUND_COLOR; color:white; font-weight: bold; border:none; padding:10px; } .ticket{ background:white; &:not(:first-child) { margin-top: 10px; } .ticket-title{ width:100%; padding:20px; } } } }
До сих пор весь стиль под #boardpage
и многоразовые компоненты еще не определены. Это будет рефакторинг, мы сделаем, когда будем делать, как только мы найдем себя copypasting … (Примечание: мне нравится этот подход, потому что он держит меня очень ориентированным на цель. Я еще не думаю о инфраструктуре, но однажды мне это нужно, маленький рефакторинг заставит меня там .)
Если вы не видите изменения в стиле, убедитесь, что вы вспомнили, чтобы добавить @import 'Board_page';
Заявление на main.scss
Шаг 2: Добавление списка и функциональность билета
Пришло время включить добавление билетов и списков. У нас уже есть крючок для добавления билета на кнопке Добавить билет, но нам также нужны некоторые действия, чтобы добавить список. На данный момент привязывая его к Дважды щелкните
| На доске звучит приятно.
А в контроллере мы реализуем эти функции:
// BoardPageCtrl.js $scope.addList = function () { $scope.lists.push({name: 'new list', tickets: []}) } $scope.addTicket = function (list) { list.tickets.push({}) }
Довольно просто, и это будет делать сейчас.
Шаг 3: время тестирования
Так что играя с новым блестящим приложением, я обнаружил некоторые проблемы в стиле. Давайте рассмотрим и посмотрим, как их разрешить.
А. Списки не выровнены на вершине
Когда я создаю новый список, он не выровнен к вершине. Этого можно легко исправить, рассказывая все списки, которые будут выровнены на вершину. Просто добавьте Вертикально-выравнивание: верх;
на .список
B. Списки превышают содержимое страницы
Когда я нажимаю «добавить билет», я вижу промывки списков по области содержимого.
Чтобы быстро исправить это, добавьте следующие CSS
.list-content { max-height: 80%; overflow-y: auto; $SCROLL_OFFSET:5px; padding-right:$SCROLL_OFFSET; margin-right:$SCROLL_OFFSET; }
Обратите внимание на уродливую Максимальная высота: 80%
Отказ Это очень уродливое решение. Расстояние между нижней частью списка до конца страницы будет изменяться в соответствии с высотой экрана. Это означает, что разрешение экрана высокое, список заканчивается относительно высоким на экране. Если экран небольшой, ошибка все равно будет воспроизводить. Так почему я реализовал это таким образом?
Просто потому, что правильное решение для этой проблемы является громоздким и требует очень хороших навыков CSS, чтобы получить его правильно.
C. Генерация многих списков будет переполнена на следующую строку
Когда я пытаюсь добавить много списков, я вижу это ужасное изображение
Это легко решить, добавив Белое пространство: NOWRAP
на борту.
#boardpage{ overflow-x:auto; white-space: nowrap; }
Шаг 4: Добавление некоторого прохлады – Drag & Drop
Пока что у нас есть несколько довольно справедливых результатов. Но Trello очень известен своим сопротивлением, и было бы стыдно не иметь.
К счастью, есть довольно нефте угловая библиотека под названием Угловые перетаскивающие списки
Так что я быстро добавляю его бежать Bower Установка -S угловой - канал-и-капли
Отказ Я также добавляю зависимость модуля и соответствующий файл JavaScript на index.html.
// app.js angular.module('demo', ['ngRoute', 'dndLists'])...
После его инструкции давайте добавим немного ДНД
Атрибуты билет девочка