从Trigger设置Backbone Model时,Object没有方法'call'

时间:2013-07-14 10:02:11

标签: javascript backbone.js requirejs marionette

所以,我只花了大约3个小时试图调试这个令人讨厌的东西而且我很有智慧。

我想做的事情很简单。我正在使用搜索查询(字符串)并尝试使用其属性设置全局模型。但是,当我移动到不同的视图时,我希望模型清除这些属性,或者当他们输入新的搜索查询时,再次触发事件。我正在尝试使用Backbone Marionette Wreqr / Event Aggregator来管理这些事件。

我不知道是不是因为我正在使用requirejs,或者没有正确确定范围,但是我遇到了这个非常令人困惑的错误:

    Uncaught TypeError: Object #<Object> has no method 'call' backbone.amd.min.js:1
f backbone.amd.min.js:1
e.Events.trigger backbone.amd.min.js:1
i.extend.set backbone.amd.min.js:1
(anonymous function) app.js:42
f backbone.amd.min.js:1
e.Events.trigger backbone.amd.min.js:1
Application.searchRoute app.js:81
(anonymous function) backbone.amd.min.js:1
(anonymous function) backbone.amd.min.js:1
w.some.w.any underscore.amd.min.js:1
i.extend.loadUrl backbone.amd.min.js:1
i.extend.navigate backbone.amd.min.js:1
i.extend.navigate backbone.amd.min.js:1
SidebarLayout.search sidebar.js:177
(anonymous function) sidebar.js:3
x.event.dispatch jquery.min.js:5
y.handle

这是我的一些应用程序代码(我的主控制器)。如您所见,我正在尝试使用searchRoute方法中的其他参数设置app.searchResult模型。

有什么奇怪的是它在第一次加载页面时起作用,但当我尝试使用路由器导航或做任何事情而不是刷新页面时,它就会失败。

我尝试使用@searchResult,尝试在触发器调用后添加, @以及各种其他内容。更奇怪的是,在该范围内,app.searchResult可供我使用。一旦我从那里删除set调用,错误就不会再发生了,所以我认为必须那个?

define [
  'backbone.marionette',
  'global/layouts/home',
  'global/layouts/layout',
  'search/models/search-results',
  'search/collections/panels',
  'global/collections/categories',
  'global/collections/stores',
  'global/collections/searchResults',
  'search/views/panels',
  'apps/router'
], (Marionette, homeLayout, subpageLayout, SearchResultModel, PanelsCollection, CategoriesCollection, StoresCollection, SearchResultsCollection, PanelsView, Router) ->

  class Application extends Backbone.Marionette.Application

    onInitializeAfter: =>

      # Main Region
      @addRegions
        mainRegion: '#app'

      # AppRouter
      @router = new Router controller: @

      # Request Response / Vent
      @reqRes()
      @appVent()

      # Global Search Result Model
      @searchResult = new SearchResultModel()

      Backbone.history.start
        pushState:  false
        root:       ""

    searchRoute: (query, params) ->

      params = $.extend params, text: query
      @vent.trigger "search:setParams", params

      @subpageLayout = new subpageLayout()
      @mainRegion.show @subpageLayout

    appVent: ->
      @vent.on "search:setParams", (params) ->
        app.searchResult.set("params", params)
      @vent.on "sidebar:reset", ->
        app.searchResult.set("params", null)

如果您愿意,我可以发送更多代码,但我们的想法是使用sidebar:reset之类的自定义触发器来清除这些参数。我也正在听一些模型事件(所有这些事情在视图的上下文中工作得很好,当我不搞乱事件聚合器时)。

提前感谢您的帮助。你不知道我花了多少时间在这上面!

0 个答案:

没有答案