私はバックボーンに頭を悩ませようとしています。より具体的には、アプリケーションがその生涯を通じてどのように流れるかです。残念ながら、私の仕事では、私たちの API がどのように構造化されているかについてアクセスすることはできません (またはそのことについて言えば)。さまざまな期間から、非常に一貫性のない構造でさまざまな電話がかかってきます。
フェッチまたは同期をオーバーライドすることは、戻り値を標準化するための問題ではありませんが、(バックボーン アプリケーションでのダイビングの最初の段階で) 実際のコードをレイアウトする方法に遭遇します。
これが私の実際の例です。このページは重要ではなく、Backbone で書き直そうとしています。フローは次のとおりです。
- ページは、呼び出しからジャンル タイプのリストを読み込みます
- ジャンル タイプをクリックすると、そのジャンル タイプに基づいてサブ ジャンルが読み込まれます (サブ ジャンル タイプにはパラメータとしてジャンル コードが必要です)。
- サブジャンル タイプをクリックすると、その基準を持つすべての製品が読み込まれます。
私はかなり遠くまで行くことができますが、ある時点で、コードがめちゃくちゃになっていると感じたり、自然に感じられません。私が物事を押し込んでいるように。
私の公式の質問は次のとおりです: Backbone アプリを管理するにはどうすればよいですか?
これが私の思考プロセスの要約です:
必要に応じてグローバル名前空間を作成しました
var App = App || {};
さて、すべての例が示すように、メイン アプリケーション ビューから始めましょう。
App.MainView = Backbone.View.extend({
//this loads the outer stuff
//and creates an instance of the Genre View
});
かなり簡単です。ジャンル モデル、コレクション、およびビューが必要になります (これはサブ ジャンルにも当てはまります)。
App.Genre = Backbone.Model.extend();
App.Genres = Backbone.Collection.extend({
url: 'returns a list of genres',
model: App.Genre,
initialize: function() {
this.fetch();
},
fetch: function() {
var self = this;
$.ajax({
url: this.url,
success: function(response) {
**format return**
self.add(formattedArrayOfModels);
}
});
}
});
ビューに移りましょう。紛らわしい部分です
App.GenreView = Backbone.View.extend({
el: 'element',//easy enough
tmpl: 'my handlebars template',//implementing handlebars...no problem
initialize: function() {
//this produces a collection full of genres
this.genreList = new App.Genres();
this.genreList.on('add', _.bind(this.render, this));
},
render: function() {
//rendering not a problem, pretty straight forward
}
});
ここまでは問題ありません。ジャンル リストが読み込まれ、準備完了です。そのため、ユーザーがジャンルをクリックすると、サブジャンルをロードする必要があります
events: {
'click a': 'getSubGenres'
},
getSubGenres: function(e) {
}
これが私の問題です。getSubGenresでは、ローカルに保持しますか?
var subGenre = new App.SubGenreView();
それとも、ジャンル ビューの一部にする必要がありますか?
this.subGenre = new App.SubGenreView();
他のビューからアクセスできるように、どうにかして親オブジェクトに入れる必要がありますか? どうすればそのようなことを制御できますか?
また、サブジャンルのコレクションが既にある場合、ロードされたコレクションを (別の ajax 呼び出しの代わりに) 使用するにはどうすればよいですか。
これはあなたが使用するアプローチですか?