2012-02-25 32 views
6

をトリガではありません私が達成したいと思っているものは発射しません。今私はBackboneのソース(https://github.com/documentcloud/backbone/blob/master/backbone.js#L1027)を見てきました。それは私がやろうとしていることをサポートしていませんが、これを達成するための何らかの方法がありますか?私はこのように、あなたのengage.appオブジェクトにイベントマネージャを作成しますバックボーンルータは、私は、次のルータを持っているルート

+1

あなたの質問への回答ではありませんが、解決策(私が正しくあなたがいる場合):(再)ページをレンダリング/あなたの最も親のビュー、 'appView.render()'。 – SunnyRed

答えて

4

var vent = _.extend({}, Backbone.Events); 

を次に、あなたのルータには、受信ボックスのルートのためにこれを行う:

vent.trigger('inbox:show', page); 

とで、そのイベントを処理その中にあったコードを経路ハンドラ内に置いておきます。

appRouter.navigateを呼び出す代わりに、同じイベントをトリガーすることができます。

また、そのハンドラから、trueを渡すことなくappRouter.navigate('inbox');を呼び出すことができます。これで、ルートを強制することなく、アプリをあなたが望む状態にすることができます。

+0

それは私がやったことです。いくつか余分なコードを作成するが、半分まともな解決策のように思える。 –

+0

@JasonStonebraker [このリンク](http://lostechies.com/derickbailey/2011/08/28/dont-execute-a-backbone-js-route-handler-from-your-code/)はこのアイデアを説明しています。このパターンは私のためにうまくいきました。ルータには単一のジョブが残っています。これはブラウザURLの変更に基づいてルーティングされます。この質問は、すでにそのルートにいるときにルートをトリガーしようとすることに関するものでした。このソリューションは回避策(IMO)ではなく、より良い設計です。 –

-1

別のオプションは、ちょうど限り予想通り、私はappRouter.navigate('inbox', {trigger: true});作品を使用してバックボーン0.9.10のとおり...言うことができるように

appRouter.inbox(); 
2

メソッドを呼び出すことです。

+0

バックボーンのソースにはまだこれがあります: 'if(this.fragment === fragment)return;'だから、Gavinの問題はまだ存在すると思います。また、sourceには次のようなコメントがあります: 'オプションオブジェクトには、ルートコールバックを開始する(通常は望ましくない)場合は、 'trigger:true'を含めることができます。 –

関連する問題