В настоящее время я работаю с видео PeepCode на Backbone.js , но пытаюсь написать все это на CoffeeScript, а не на чистом JavaScript.
Пока все хорошо, кроме случаев, когда я пытаюсьчтобы запустить тесты Jasmine в коде, который я запускаю при некоторых ошибках типа:
TypeError: Cannot call method 'isFirstTrack' of undefined
TypeError: Cannot call method 'get' of undefined
Мой файл CoffeeScript / Backbone выглядит следующим образом:
jQuery ->
class window.Album extends Backbone.Model
isFirstTrack: (index) ->
index is 0
class window.AlbumView extends Backbone.View
tagName: 'li'
className: 'album'
initialize: ->
@model.bind('change', @render)
@template = _.template $('#album-template').html()
render: =>
renderedContent = @template @model.toJSON()
$(@el).html(renderedContent)
return this
И спецификация теста Jasmine выглядит так:*
var albumData = [{
"title": "Album A",
"artist": "Artist A",
"tracks": [
{
"title": "Track A",
"url": "/music/Album A Track A.mp3"
},
{
"title": "Track B",
"url": "/music/Album A Track B.mp3"
}]
}, {
"title": "Album B",
"artist": "Artist B",
"tracks": [
{
"title": "Track A",
"url": "/music/Album B Track A.mp3"
},
{
"title": "Track B",
"url": "/music/Album B Track B.mp3"
}]
}];
describe("Album", function () {
beforeEach(function () {
album = new Album(albumData[0]);
});
it("creates from data", function () {
expect(this.album.get('tracks').length).toEqual(2);
});
describe("first track", function() {
it("identifies correct first track", function() {
expect(this.album.isFirstTrack(0)).toBeTruthy();
})
});
});
Я предполагаю, что проблема связана с CoffeeScript, заключающим в себе все функции.Когда я удаляю jQuery из уравнения, он работает нормально.Странно, хотя, хотя Жасмин говорит мне TypeError: Cannot call method 'isFirstTrack' of undefined
, если я запускаю album.isFirstTrack(0)
в консоли на странице, она возвращает true
, поэтому у окна действительно есть доступ к переменным и методам.