1

所以,我只花了大约 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来清除这些参数。我也在听一些模型事件(所有这些东西都在视图的上下文中工作得很好,当我不弄乱事件聚合器时)。

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

4

0 回答 0