Разработка OblakanRM
Итак, напишу сумбурную заметку. Я занимаюсь разработкой общественной карты проблем для своего города. И 1 ноября будет первый публичный, тестовый релиз, который можно будет потыркать.
К сожалению, разработка слегка затянулась из-за применения новых технологий, с которыми мне хотелось поиграться. Но оно того стоит! Вообще, я планирую выступить с докладом на предстоящей местной IT-конференции в котором опишу как и на чём работает мой проект. Но некоторые вещи можно рассказать и сейчас.
Мой проект работает на Ruby on Rails 4 и Ember. На последней технологии я и заострю ваше внимание, так как именно с ней я в последние недели занимаюсь горячим, буйным.. исследованием.
Ember — это js-фреймворк для разработки веб-приложений. По сути, это означает, что весь клиентский интерфейс строится на js, а общение с сервером ограничивается передачей данных моделей, например, в формате json через API. А это значит, что можно таким же образом добавить мобильные клиенты, не делая дополнительных усилий для организации коммуникации с сервером.
# GET /api/reports
{"reports": [
{
"id": 4,
"title": "1",
"description": "1",
"address": null,
"longitude": 91.43,
"latitude": 53.717,
"user_id": null,
"created_at": "2013-10-15T00:51:24.226+08:00",
"updated_at": "2013-10-15T00:51:25.446+08:00",
"url": "http://localhost:3000/api/reports/4"
}
]}
Этот фреймворк позволяет добиться плавного, отзывчивого, динамичного интерфейса, минимизируя усилия по поддержанию кода. К примеру, этот код добавляет комментарий:
# controllers/comments_controller.js.coffee
OblakanRM.CommentsController = Ember.ArrayController.extend
actions:
comment_submit: ->
comment_hash = {
...
}
comment = @get('store').createRecord('comment', comment_hash)
comment.save().then =>
@pushObject(comment)
, (reason) ->
toastr.error(reason, 'Возникла ошибка при добавлении комментария')
Одной командой @pushObject(comment), комментарий автоматически добавляется в список и обновляются все счётчики, связанные с комментариями.
Мне очень нравится концепция Ember, хотя им предстоит ещё много работы. Фреймворк активно развивается и порой очень радикально. Многие примеры кода на stackoverflow тупо устарели, хотя они могут быть датированы парой месяцев назад. А документации фреймворку явно не хватает для работы.