1

我正在使用 Rails。我刚刚安装了backbone-railsgem 并按照此处的说明进行操作。

当我尝试做时Backbone.history.start(),我收到此错误:

Uncaught TypeError: Cannot call method 'start' of undefined

我知道,根据this other SO questionBackbone.history.start(),在您创建至少一条路线之后才能调用它。不过,这似乎不是我的问题,因为我确实有多个路由,在此 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 must be undefined,正如其他人所说,这通常是因为在 Backbone 创建此对象之前,需要有一个至少有一个路由处于活动状态的路由器。

Backbone.js 创建一个名为 Backbone.history(小写“h”)的 Backbone.History(大写“H”)的实例,一旦创建了一个控制器并在其上指定了至少一个路由

我看到您正在创建路由器的新实例,但可能仍然存在错误的路由器实例,只是与其他问题中讨论的风格不同 - 在调用之前检查typeof您的window.router对象路由器Backbone.history.start()。它会返回您所期望的吗?

编辑:正如下面的评论所证实的那样,这RestaurantLocationsRouter有点糟糕。我们还没有弄清楚为什么,但是创建一个新的路由器可以按预期工作,并且表明您的路由器实例确实出现了问题。

于 2012-06-26T16:05:21.950 回答