TodoMVC.module "TodoList", (TodoList, App, Backbone, Marionette, $, _) ->
# TodoList Router
# ---------------
#
# Handle routes to show the active vs complete todo items
TodoList.Router = Marionette.AppRouter.extend
appRoutes: "*filter": "filterItems"
# TodoList Controller (Mediator)
# ------------------------------
#
# Control the workflow and logic that exists at the application
# level, above the implementation detail of views and models
TodoList.Controller = ->
@todoList = new App.Todos.TodoList()
_.extend TodoList.Controller::,
# Start the app by showing the appropriate views
# and fetching the list of todo items, if there are any
start: ->
@showHeader @todoList
@showFooter @todoList
@showTodoList @todoList
App.bindTo @todoList, "reset add remove", @toggleFooter, this
@todoList.fetch()
showHeader: (todoList) ->
header = new App.Layout.Header(collection: todoList)
App.header.show header
showFooter: (todoList) ->
footer = new App.Layout.Footer(collection: todoList)
App.footer.show footer
showTodoList: (todoList) ->
App.main.show new TodoList.Views.ListView(collection: todoList)
toggleFooter: ->
App.footer.$el.toggle @todoList.length
# Set the filter to show complete or all items
filterItems: (filter) ->
App.vent.trigger "todoList:filter", filter.trim() or ""
# TodoList Initializer
# --------------------
#
# Get the TodoList up and running by initializing the mediator
# when the the application is started, pulling in all of the
# existing Todo items and displaying them.
TodoList.addInitializer ->
controller = new TodoList.Controller()
new TodoList.Router(controller: controller)
controller.start()
Uncaught NoMethodError: Method 'filterItems' was not found on the controller
I've taken the TodoMVC example for Marionette, and converted it to CoffeeScript using js2coffee and I'm using requirejs. I'm not sure why this is happening, as I've added no real custom code. If there is any additional information I can include, please let me know.
I also had this error.
The problem is in the following code:
TodoList.Controller = ->
@todoList = new App.Todos.TodoList()
It will add return
in front of the second line once converted to JS. For me, adding true
as the next line solved the problem.
TodoList.Controller = ->
@todoList = new App.Todos.TodoList()
true