Backbone Marionette路线没有被叫

时间:2014-07-21 04:47:30

标签: javascript backbone.js coffeescript marionette

我正在关注Brian Mann的backbonerails.com教程,学习骨干/牵线木偶。出于某种原因,当我转到http://localhost:3000/#users时,不会调用listUsers。任何想法或想法都非常感谢!

知道我哪里出错了?

@Demo.module "UsersApp", (UsersApp, App, Backbone, Marionette, $, _) ->

class UsersApp.Router extends Marionette.AppRouter
    appRoutes:
        "users": "listUsers"

UsersApp.API =
    listUsers: ->
        console.log "listUsers"

App.addInitializer ->
    new UsersApp.Router
        controller: UsersApp.API

我还可以向UsersApp添加初始化程序,并让它来处理控制台消息。

UsersApp.addInitializer: ->
console.log("initialized UsersApp")

同样,如果我将其添加到

,我也会看到一条日志消息
App.addInitializer ->
        console.log "initialized"
        new UsersApp.Router
            controller: API

在运行初始化程序之前,我实际上并没有启动Backbone路由:

@Demo = do (Backbone, Marionette) ->

  App = new Marionette.Application

  App.addRegions
    headerRegion: "#header-region"
    mainRegion: "#main-region"
    footerRegion: "#footer-region"

  App.addInitializer ->
    App.module("HeaderApp").start()
    App.module("FooterApp").start()

  App.on "initialize:after", ->
    if Backbone.history
      Backbone.history.start()

应用

当玩它时,几乎看起来我的UsersApp.Router对象实际上并没有被创建。这可能是问题吗?

修改

将控制器添加为UsersApp.API似乎越来越近了:

App.addInitializer ->
        new UsersApp.Router
            controller: UsersApp.API

但现在我得到了一个不同的错误:

Uncaught TypeError: Cannot read property 'listUsers' of undefined 

为什么找不到listUsers函数?

2 个答案:

答案 0 :(得分:1)

您尚未定义UserApp.API。您刚刚在函数中定义了局部变量API,并且该变量无论如何都不会被曝光。

如果您想使用UserApp.API,则需要实际API UserApp属性。

@Demo.module "UsersApp", (UsersApp, App, Backbone, Marionette, $, _) ->
  UserApp.API =
    listUsers: ->
      # ...

答案 1 :(得分:0)

我明白了。问题是我在Backbone.history事件上开始"initialize:after",但我确实需要在"start"事件中启动它:

App.on "start", ->
    if Backbone.history
      Backbone.history.start()

这样做就像魅力一样。