【问题标题】:Backbone Marionette Route Not Being Called未调用主干木偶路线
【发布时间】:2014-09-11 12:48:59
【问题描述】:

我正在关注 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 函数?

【问题讨论】:

    标签: javascript backbone.js coffeescript marionette


    【解决方案1】:

    您尚未定义UserApp.API。您刚刚在函数内定义了一个局部变量 API,并且该变量无论如何都不会暴露。

    如果你想使用UserApp.API,你实际上需要将API设置为UserApp的属性。

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

    【讨论】:

    • 这使得错误消失了,但控制台消息仍然没有被记录。为了便于阅读,我刚刚更新了我的代码。
    • @TomHammond 你什么都没记录。 console.log listUsers 尝试记录未定义的变量。试试console.log "listUsers"
    • 是的,我在最初发布后就抓住了那个:)
    【解决方案2】:

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

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

    这样做就像一种魅力。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-10
      • 2013-07-15
      • 1970-01-01
      • 2014-03-27
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多