主干木偶路由未被调用

Backbone Marionette Route Not Being Called

本文关键字:调用 路由      更新时间:2023-09-26

我正在跟随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

直到初始化器运行之后,我才真正启动主干路由:

@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函数?

您没有定义UserApp.API。您刚刚在函数中定义了一个局部变量API,并且该变量不会以任何方式暴露。

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

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

我明白了。问题是我在"initialize:after"事件上启动Backbone.history,但我真的需要在"start"事件上启动它:

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

这样做效果很好。