Подтвердить что ты не робот

Невозможно вызвать "start" из undefined при запуске backbone.js history.

Я получаю Cannot call 'start' of undefined при вызове...

    Backbone.history.start()

При выполнении некоторых проверок Backbone возвращает объект, но Backbone.history возвращает undefined.

Что может быть причиной этого?

Спасибо

4b9b3361

Ответ 1

Есть ли у вас маршруты на контроллере? Магистраль создает историю только после того, как задан хотя бы один маршрут.

Подробнее:

TypeError: невозможно вызвать метод 'start' из undefined **

Хм, почему-то Backbone.history undefined, и поэтому нет метод начала на нем. Оказывается, что Backbone.js создает экземпляр of the Backbone.History(верхний регистр 'H), называемый Backbone.history(нижний case 'h) после создания контроллера, который имеет хотя бы один маршрут, указанный на нем. Это имеет смысл, поскольку управление историей требуется, если есть маршруты для ответа.

http://tinnedfruit.com/2011/04/26/testing-backbone-apps-with-jasmine-sinon-3.html

Ответ 2

Я попал в ту же ошибку.

Это происходит, если вы не делаете экземпляр маршрутизатора:

var routerInstance = new blogRouter();

Ответ 3

Если вы используете CoffeeScript, а ваш маршрутизатор определяется с помощью ключевого слова класса CoffeeScript с помощью метода конструктора, дважды проверьте, что вы вызываете super в определении конструктора. Это решило, что проблема Backbone.history была для меня нулевой.

class AppRouter extends Backbone.Router
  constructor: (options) ->
    super(options)
    # other initialization code

Ответ 4

Обязательно включите jQuery.js перед underscore.js и backbone.js в HTML-заголовке.

Ответ 5

Я столкнулся с одной и той же проблемой по разным причинам, проведя пару часов, когда понял, что метод в моем маршрутизаторе "route": function() вызывает проблему после того, как я прокомментирую этот ненужный дополнительный метод, history.start() работал как ожидалось.

Ответ 6

Аналогичное сообщение об ошибке ".. не запускает метод" start ", если вы пишете Backbone.History.start вместо Backbone.History.start (правильный - с нижним регистром h в history).

Ответ 7

(function($) {

    var Demo = Backbone.Router.extend({
        routes:{
            '*actions':'defaultRoute'
        },
        defaultRoute:function(action){
            alert('xss');
        }
    });

    var demo = new Demo;
    Backbone.history.start();
    //My site http://bbs.w3hacker.com

})(jQuery);

Ответ 8

Также использование старых версий jquery может привести к этому