web-dev-qa-db-ja.com

バックボーン.js履歴の開始時に未定義の「開始」を呼び出すことはできません。

Cannot call 'start' of undefined電話するとき...

    Backbone.history.start()

いくつかのチェックを実行すると、Backboneはオブジェクトを返しますが、Backbone.historyは未定義を返します。

これの原因は何でしょうか?

ありがとう

31
fancy

コントローラにルートはありますか?バックボーンは、少なくとも1つのルートが指定された場合にのみ履歴を作成します。

もっと:

TypeError:未定義のメソッド 'start'を呼び出すことができません**

うーん、何らかの理由でBackbone.historyが定義されていないため、startメソッドがありません。少なくとも1つのルートが指定されたコントローラーが作成されると、Backbone.jsはBackbone.history(小文字の「h」)と呼ばれるBackbone.History(大文字の「H」)のインスタンスを作成することがわかりました。履歴管理は、応答するルートがある場合にのみ必要になるため、これは理にかなっています。

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

51
wesbos

同じエラーが発生しました。

これは、ルーターのインスタンスを作成しない場合に発生します。

var routerInstance = new blogRouter();
10
chrisftw

HTMLヘッドにjQuery.jsbeforeunderscore.jsbackbone.jsが含まれていることを確認してください。

6
Rok Krulec

CoffeeScriptを使用していて、コンストラクターメソッドでCoffeeScriptクラスキーワードを使用してルーターが定義されている場合は、コンストラクターの定義でsuperを呼び出すことを再確認してください。これにより、Backbone.historyがnullになる問題が解決されました。

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

さまざまな理由でまったく同じ問題に直面しました。数時間を費やした後、ルーターの「route」:function()のメソッドが問題の原因であることに気付きました。この不要な追加のメソッドにコメントした後、history.start()は期待どおりに機能しました。 。

2
Chandu
(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
Musikar

Backbone.History.startの代わりにBackbone.history.startを書き込むと、同様のエラーメッセージ「..has no method'start '」がポップアップします(正しいものはhの小文字のhistoryです)。

1
jbasko

また、古いバージョンのjqueryを使用すると、これが発生する可能性があります

0
Houman