所以,我只花了大约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
之类的自定义触发器来清除这些参数。我也正在听一些模型事件(所有这些事情在视图的上下文中工作得很好,当我不搞乱事件聚合器时)。
提前感谢您的帮助。你不知道我花了多少时间在这上面!