1

Railsを使用しています。backbone-railsgemをインストールし、ここの指示に従いました。

やろうとするとBackbone.history.start()、次のエラーが発生します。

Uncaught TypeError: Cannot call method 'start' of undefined

この他のSOの質問Backbone.history.start()によると、少なくとも1つのルートを作成するまで、それを呼び出すことはできないことを理解しています。ただし、このCoffeeScriptファイルで定義されている複数のルートがあるため、これは私の問題ではないようです。

class Lunchhub.Routers.RestaurantLocationsRouter extends Backbone.Router
  initialize: (options) ->
    @restaurantLocations = new Lunchhub.Collections.RestaurantLocationsCollection()
    @restaurantLocations.reset options.restaurantLocations

  routes:
    "new"      : "newRestaurantLocation"
    "index"    : "index"
    ":id/edit" : "edit"
    ":id"      : "show"
    ".*"        : "index"

なぜこのエラーが発生するのですか?

編集:これが私のコードです:

<div id="restaurant_locations"></div>

<script type="text/javascript">
  $(function() {
    window.router = new Lunchhub.Routers.RestaurantLocationsRouter({restaurantLocations: <%= @restaurant_locations.to_json.html_safe -%>});
    Backbone.history.start();
  });
</script>
4

1 に答える 1

1

を呼び出す前に、newキーワードを使用してルーターのインスタンスを作成してみてくださいBackbone.history.start

編集:Backbone.historyはである必要がありますundefined。これは、他の人が言っているように、 Backboneがこのオブジェクトを作成する前に、少なくとも1つのルートがアクティブなルーターが必要なためです。

Backbone.jsは、少なくとも1つのルートが指定されたコントローラーが作成されると、Backbone.history(小文字の「h」)と呼ばれるBackbone.History(大文字の「H」)のインスタンスを作成します。

ルーターの新しいインスタンスを作成しているようですが、他の問題で説明されているものとはまったく異なるフレーバーである、不良ルーターインスタンスがまだ問題である可能性があります。呼び出しの前にオブジェクトルーターを確認してtypeofください。それはあなたが期待するものを返しますか?window.routerBackbone.history.start()

編集:以下のコメントで確認されているように、それRestaurantLocationsRouterはどういうわけか悪いです。理由はまだわかりませんが、新しいルーターを作成すると期待どおりに機能し、ルーターインスタンスで問題が発生したことを示しています。

于 2012-06-26T16:05:21.950 に答える