だから、私はこの厄介なことをデバッグしようとして約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
代わりに使用してみたり, @
、トリガー呼び出しの後に a を追加したり、さまざまなことを試しました。奇妙なのは、その範囲内で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
してこれらのパラメーターを消去することをお勧めします。また、いくつかのモデル イベントも聞いています (これらはすべて、ビューのコンテキスト内から、イベント アグリゲーターをいじらない場合にうまく機能しています)。
よろしくお願いします。私がこれに何時間費やしたかわかりません!