0

私はバックボーンに頭を悩ませようとしています。より具体的には、アプリケーションがその生涯を通じてどのように流れるかです。残念ながら、私の仕事では、私たちの API がどのように構造化されているかについてアクセスすることはできません (またはそのことについて言えば)。さまざまな期間から、非常に一貫性のない構造でさまざまな電話がかかってきます。

フェッチまたは同期をオーバーライドすることは、戻り値を標準化するための問題ではありませんが、(バックボーン アプリケーションでのダイビングの最初の段階で) 実際のコードをレイアウトする方法に遭遇します。

これが私の実際の例です。このページは重要ではなく、Backbone で書き直そうとしています。フローは次のとおりです。

  1. ページは、呼び出しからジャンル タイプのリストを読み込みます
  2. ジャンル タイプをクリックすると、そのジャンル タイプに基づいてサブ ジャンルが読み込まれます (サブ ジャンル タイプにはパラメータとしてジャンル コードが必要です)。
  3. サブジャンル タイプをクリックすると、その基準を持つすべての製品が読み込まれます。

私はかなり遠くまで行くことができますが、ある時点で、コードがめちゃくちゃになっていると感じたり、自然に感じられません。私が物事を押し込んでいるように。

私の公式の質問は次のとおりです: 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 呼び出しの代わりに) 使用するにはどうすればよいですか。

これはあなたが使用するアプローチですか?

4

1 に答える 1

1

私が答える前に、最初にいくつかのことを説明します。フェッチ関数はその仕事であるため $ajax 呼び出しを必要としないため、フェッチ内error:function(){}success:function(){}すぐに評価できますが、それは URL が正しく設定されていることを前提としています。2 番目: バックボーンのキーボード ヘッド ファイトで大いに役立ったのは、pdf 形式の非常に豊富なチュートリアルを含むaddy osmani Backbone Fundamentalsです。

ここで質問に戻ります。私の経験から言うと、ほとんどの場合「これ」が必要になるため、慣れるには良い習慣です。また、正しく実装すればこれらの問題の多くを解決するものがあります: backbone layoutmanager

とにかく、サブビューを配置する場所の決定は、完全に設計上の決定であり、ページとファイルの構造に大きく依存します。

プリロードされている「コレクション」の使用方法について:あなたが話しているコレクションにはすべてのサブジャンルが含まれているため、通常、ビューが特定のジャンルのビューに変更されても変更されないはずなので、本当にわかりませんでした、引き続きご利用いただけます。

それでも、私が言ったことはすべて、ファイルの構造に関連しています。私は app.js と router.js と他の多くのファイルを実行しますが、主な作業は常にメインの 2 つにあるため、基本的には常にアクセスできます。すべての。

これがあなたの質問に答えたことを願っています

于 2013-09-26T07:36:05.173 に答える