Cannot call 'start' of undefined
電話するとき...
Backbone.history.start()
いくつかのチェックを実行すると、Backboneはオブジェクトを返しますが、Backbone.historyは未定義を返します。
これの原因は何でしょうか?
ありがとう
コントローラにルートはありますか?バックボーンは、少なくとも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
同じエラーが発生しました。
これは、ルーターのインスタンスを作成しない場合に発生します。
var routerInstance = new blogRouter();
HTMLヘッドにjQuery.js
beforeunderscore.js
とbackbone.js
が含まれていることを確認してください。
CoffeeScriptを使用していて、コンストラクターメソッドでCoffeeScriptクラスキーワードを使用してルーターが定義されている場合は、コンストラクターの定義でsuperを呼び出すことを再確認してください。これにより、Backbone.historyがnullになる問題が解決されました。
class AppRouter extends Backbone.Router
constructor: (options) ->
super(options)
# other initialization code
さまざまな理由でまったく同じ問題に直面しました。数時間を費やした後、ルーターの「route」:function()のメソッドが問題の原因であることに気付きました。この不要な追加のメソッドにコメントした後、history.start()は期待どおりに機能しました。 。
(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);
Backbone.History.start
の代わりにBackbone.history.start
を書き込むと、同様のエラーメッセージ「..has no method'start '」がポップアップします(正しいものはh
の小文字のhistory
です)。
また、古いバージョンのjqueryを使用すると、これが発生する可能性があります