Search code examples
backbone.jscoffeescriptrequirejsmarionettetodomvc

marionette todomvc extend error


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.


Solution

  • 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