2011-09-08 9 views
31

呼び出すときにCannot call 'start' of undefinedを取得するbackbone.jsの履歴を開始するときにundefinedの 'start'を呼び出すことはできません。

 Backbone.history.start() 

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

これの原因は何ですか?

ありがとう

+0

URLに「#」文字を続けて入力すると、この問題は解決しなくなりました。 – javabrain

答えて

51

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

の詳細:あなたの代わりにBackbone.history.startBackbone.History.startを書く場合

TypeError: Cannot call method 'start' of undefined**

Hmm, for some reason Backbone.history is undefined, and so there is no start method on it. It turns out that Backbone.js creates an instance of Backbone.History (upper case ‘H’) called Backbone.history (lower case ‘h’) once a controller has been created that has at least one route specified on it. This makes sense, as history management is only required if there are routes to respond to.

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

+0

私はこれを呼び出す前にwindow.routerをベースルータに設定しました。しかし、私はこの質問を完全に理解していないかもしれません。 – fancy

+0

ああ、私はそれを理解した、リードのおかげで。 – fancy

+1

あなたはそれを稼働させるために何をしましたか?私は 'backbone.history.start()'を呼び出す前に 'window.router'を何かに設定していますが、まだエラーが発生しています。 –

1

なエラーメッセージ「..は何の方法 『スタート』を持っていない」ポップアップする(正しいものは小文字h中でありますhistory)。

10

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

あなたがルータのインスタンスを作成していない場合に、この問題が発生:

var routerInstance = new blogRouter(); 
+0

私は実際にインスタンス(http://dpaste.com/06NK3KD)を持っていますが、デフォルトの機能への道を見つけることはできません。 – tutuca

1
(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); 
+3

あなたの投稿の品質を向上させるには、このコードがどのように/どのように問題を解決するのかを含めるようにしてください。 –

6

あなたがCoffeeScriptのを使用していて、お使いのルーターがコンストラクタメソッド、ダブルチェックとCoffeeScriptのクラスのキーワードを使用して定義されている場合コンストラクターの定義でsuperを呼び出すことができます。これにより、Backbone.historyの問題が解決しました。私はこの不必要な余分な方法で、歴史をコメントした機能()、問題を引き起こしている:

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

私は時間のカップルを過ごした後、私は私のルータ「ルート」の方法は、ことに気づき、別の理由で正確に同じ問題に直面しました.start()は期待どおりに動作しました。

+0

ありがとう!あなたは私の一日を救った! –

6

は、HTMLの頭の中でunderscore.jsjQuery.jsbackbone.jsを含めることを確認してください。

0

jqueryの旧バージョンを使用すると、このエラーが発生する可能性があります。

関連する問題