Ну, я не могу решить для вас, это зависит, главным образом, от того, насколько близок крайний срок, но я лично предпочитаю подход Backbone.js.
Если я поспорю, я могу сказать, что у вас будетстатические и кешируемые JS-скрипты и легкие AJAX-запросы (только JSON), в то время как при использовании другого подхода вы будете загружать более тяжелые и не кешируемые скрипты.
Но, прежде всего, я считаю, что Backbone-путь - лучший подход кПолучите ваш код организованным и обслуживаемым.
Coffeescript - это круто и очень быстро для изучения.Это значительно упрощает синтаксис JS и делает его интересным.Это стоит попробовать.Учился в 30 мин.
Backbone.js - это круто и быстро для изучения.Использование этого подхода позволит вам полагаться на события, которые намного более чисты, чем то, без чего мы не можем обойтись.
Благодаря конвейеру ресурсов вы можете разделить свой класс представлений / моделей / маршрутизаторов на отдельные файлы, которыеэто очень приятно.
Благодаря coffeescript вы можете написать свои базовые объекты с очень чистым синтаксисом, подобным этому:
class @MyView extends Backbone.View
events:
'click obj': 'handler'
[...]
С этим я добавляю в свои проекты небольшой @module
помощник дляорганизовать мои объекты в пространства имен.
Однако вам потребуется некоторое время, чтобы найти правильную организацию файлов.
Вы можете начать с gem rails-backbone
и иметь несколько генераторовпохожи на рельсы.Мне не нравится это лично, но я думаю, что это хорошее начало.Он включает в себя функцию Backbone.sync
, адаптированную к рельсам.
Edit
Вот некоторые подробности о помощнике @module
.Я включаю это в application.js.coffee
(не забудьте require_self
):
@module = (names, fn) ->
names = names.split '.' if typeof names is 'string'
space = @[names.shift()] ||= {}
space.module ||= @module
if names.length
space.module names, fn
else
fn.call space
В моих файлах классов:
@module 'MyProject.Model', ->
class @MyModel extends Backbone.Model
[...]
(Обратите внимание, что @
- это coffeescriptярлык для this.
.)
Помощник создает объекты MyProject
и MyProject.Model
при необходимости (если ноль) и выполняет данную функцию с this
привязкой к MyProject.Model
.Таким образом, вы можете получить доступ к своей модели, например, из корневого пространства имен (document
):
m = new MyProject.Model.MyModel
Вы также можете использовать помощника:
@module 'MyProject', ->
@module 'Model', ->
[...]
Я использую следующую иерархию пространств имен
MyProject
Model
View
Router
Runtime (to store all runtimes objects and don't pollute the root namespace, easier for debug)