私は、バックボーンルーターの適切な使い方の背後にあるアイディアを得られないと思います。ここに私が持っているものがあります:バックボーンルーター:最初にデータを取得するのを待つ
私は、ページが読み込まれたときに私がサーバから取り出したデータをいくつか持っており、それをモデルやコレクションにパックしています。これらのモデルとコレクションの数は不定です。私はルーターを使用して特定のコレクションのビューを最初から直接レンダリングできるようにしたいと考えています。
問題は次のとおりです。バックボーンルーターが早期に起動し、特定のビューにアクセスして、そのビューをまだ作成していないため、そのrender
アクションをトリガーすることはできません。つまり、実際にフェッチが完了した後でルートを起動させる必要があります。
これはそれを行うための適切な方法であれば、私は知らないが、私が思いついた唯一のアイデアはにある:別のトップレベルにルートの定義とBackbone.history.start();
ビットをラップ
- -accesible関数(後で手動で呼び出す準備)
- 私のコレクションの
fetch()
- のために、これらのコレクションの数が不明である
success
コールバックとして機能実行し、また、私はそれらのすべてがフェッチされた時を知る方法がない、と私は開始したくありませんルートを複数回だから私は_.defer()
と_.once()
を使っている。
これは動作しますが、それは確かに非常に奇妙に見える:
ルータ:
window.startRoutes = _.once(function() {
var AccountPage = Backbone.Router.extend({
routes: {
'set/:id': 'renderSet',
},
renderSet: function(setId) {
/** … **/
// Call the rendering method on the respective CardView
CardsViews[setId].render();
}
});
var AccountPageRouter = new AccountPage;
Backbone.history.start();
});
はコレクション:だから私の質問は...私は右のそれを
window.CardsCollection = Backbone.Collection.extend({
model: Card,
initialize: function(params) {
/** … **/
// Get the initial data
this.fetch({success: function() {
_.defer(startRoutes);
}});
},
});
をやっているのですか?それともこれを行う良い方法がありますか?
なぜajaxコールをすぐに行うのですか?最初のデータのロードに必要なJSONをページにレンダリングし、データをバックボーンの開始点に渡すのはなぜですか? – redsquare