I think this is more of a CoffeeScript question. I want to be able to use classes from Backbone in a foo.coffee
file. I tried using the -r
option to require Backbone when running the coffee
command:
coffee -r "../backbone" -c foo.coffee
The compiler complained that Backbone was undefined. I'm sure that this must be pret开发者_开发技巧ty simple. It's easy to find examples of people using CoffeeScript and Backbone together. I also tried requiring the class at the top of the file like so:
Backbone.model = require('../../backbone').Model
class foo extends Backbone.model
I could write it to console.log
in the initialize
method. When I tried writing this
to console.log
, I just got an empty object {}
.
Can anyone tell me how to get this going?
If you're using CoffeeScript and Backbone.js, I recommend checking out Brunch. It may just get you past your difficulties.
Could you provide more of your code? I wasn't able to replicate the issue you had with initialize
. Here's my code, with backbone.js
in the same directory as the coffee
file:
Backbone = require './backbone'
class foo extends Backbone.Model
initialize: ->
console.log this
new foo
On new foo
, initialize
is called and the output is
{ attributes: {},
_escapedAttributes: {},
cid: 'c0',
_previousAttributes: {} }
As to the issue with -r
, there are two reasons it doesn't work: First, -r
performs
require '../backbone'
without assigning it to anything. Since Backbone doesn't create globals (only exports), the module has to be assigned when it's require
d.
Second, using -r
in conjunction with -c
doesn't add the require
d library to the compiled output. Instead, it requires it during compilation. Really, -r
only exists so that you can extend the compiler itself—for instance, adding a preprocessor or postprocessor to the compilation pipeline—as documented on the wiki.
精彩评论