Ответ 1
Если вы используете CoffeeScript и Backbone.js, я рекомендую проверить Brunch. Это может просто помочь вам преодолеть ваши трудности.
Я думаю, что это скорее вопрос 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
, я просто получил пустой объект {}
.
Может ли кто-нибудь сказать мне, как это сделать?
Если вы используете CoffeeScript и Backbone.js, я рекомендую проверить Brunch. Это может просто помочь вам преодолеть ваши трудности.
Не могли бы вы предоставить больше своего кода? Я не смог воспроизвести проблему с 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.