Начало работы с Backbone и CoffeeScript

Я думаю, что это скорее вопрос CoffeeScript. Я хочу иметь возможность использовать классы из Backbone в файле foo.coffee. Я попытался использовать параметр -r, чтобы потребовать Backbone при запуске команды coffee:

coffee -r "../backbone" -c foo.coffee

Компилятор жаловался, что Backbone был undefined. Я уверен, что это должно быть довольно просто. Легко найти примеры людей, использующих CoffeeScript и Backbone вместе. Я также попытался потребовать класс в верхней части файла, например:

Backbone.model = require('../../backbone').Model

class foo extends Backbone.model

Я мог бы записать его в console.log в методе initialize. Когда я пробовал писать this до console.log, я просто получил пустой объект {}.

Может ли кто-нибудь сказать мне, как это сделать?

Ответ 1

Если вы используете CoffeeScript и Backbone.js, я рекомендую проверить Brunch. Это может просто помочь вам преодолеть ваши трудности.

Ответ 2

Не могли бы вы предоставить больше своего кода? Я не смог воспроизвести проблему с initialize. Здесь мой код с backbone.js в том же каталоге, что и файл coffee:

Backbone = require './backbone'

class foo extends Backbone.Model
  initialize: ->
    console.log this

new foo

Вкл. new foo вызывается initialize и вывод

{ attributes: {},
  _escapedAttributes: {},
  cid: 'c0',
  _previousAttributes: {} }

Что касается проблемы с -r, есть две причины, по которым она не работает: во-первых, -r выполняет

require '../backbone'

не присваивая его чему-либо. Поскольку Backbone не создает глобальные (только экспорт), модуль должен быть назначен, когда он require d.

Во-вторых, использование -r в сочетании с -c не добавляет библиотеку require d к скомпилированному выходу. Вместо этого он требует его во время компиляции. Действительно, -r существует только для того, чтобы вы могли расширить сам компилятор, например, добавив препроцессор или постпроцессор в конвейер компиляции: задокументированный в wiki.