Невозможно вызвать 'start' из undefined при запуске истории backbone.js. - PullRequest
31 голосов
/ 08 сентября 2011

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

    Backbone.history.start()

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

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

Спасибо

Ответы [ 8 ]

51 голосов
/ 08 сентября 2011

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

Подробнее:

TypeError: Невозможно вызвать метод 'start' из неопределенного **

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

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

10 голосов
/ 16 мая 2012

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

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

var routerInstance = new blogRouter();
6 голосов
/ 09 ноября 2012

Убедитесь, что вы включили jQuery.js перед underscore.js и backbone.js в заголовке HTML.

6 голосов
/ 07 сентября 2012

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

class AppRouter extends Backbone.Router
  constructor: (options) ->
    super(options)
    # other initialization code
2 голосов
/ 14 сентября 2012

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

1 голос
/ 09 августа 2012
(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);
1 голос
/ 01 марта 2012

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

0 голосов
/ 20 августа 2014

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

...