所以,我只花了大约 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
来清除这些参数。我也在听一些模型事件(所有这些东西都在视图的上下文中工作得很好,当我不弄乱事件聚合器时)。
在此先感谢您的帮助。你不知道我花了多少时间在这上面!