我正在关注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函数?
答案 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()
这样做就像魅力一样。