0

URLからsvnファイルパスを読み取り、指定されたパスを「ls」にするバックボーンアプリがあります。通常は、ls の結果をテーブルに列挙するだけです。しかし、私がやりたいのは、パスが実際に特定のファイルのみに対応しているかどうかを確認することです。その場合は、代わりにファイルの内容を取得して表示します。

これを行うためのバックボーンの慣用的な方法は何でしょうか? 現在、ディレクトリ モデルと呼んでいる解析関数で、次のようなことを考えています。

  parse: function(response, options) {
    if (response.length == 1 && response[0].type == "file") {
      // what to do here?
    }
    this.get('entries').reset(response);
    $("#indicator").hide();
    $('#directory-contents').show();
    this.trigger('change');
    return {};
  },

そのため、ここ (つまり、// what to do here?) でファイルの内容を取得するために ajax リクエストを作成したくなりますが、a) 自分で ajax リクエストを直接作成するのはあまり良くないようです。b) 混ぜ合わせているような気がします。 2 つのモデルを 1 つに。ここで、DirectoryView は、実際にディレクトリをレンダリングしているか、特定のファイルをレンダリングしているかを判断するために、おそらく何らかのフラグをチェックする必要があります。

これを処理するためのより良い方法に関するアイデアはありますか?

4

1 に答える 1

2

コメントを確認し、ドメインをもう少し理解した後、次のアプローチをお勧めします。

  • ファイルシステムノードを表すFSEntryモデルを作成します(必要に応じてinode)。重要なのは、ディレクトリまたはファイルのいずれかを表すことができることです
  • FSEntryには、type「ディレクトリ」、「ファイル」、「シンボリックリンク」などの文字列属性が必要です。
  • 基本的なfsEntry.fetch()は、typeフィールドを含むメタデータをロードするだけです。
  • モデルイベントに応じてレンダリングできるビューレンダリング。モデルインスタンスに基づいて、type適切にレンダリングします(または、必要に応じて、ビューの本体とは別のテンプレートに交換します)
  • 'file'の場合type、ビューでfsEntry.fetchContent()を呼び出し、対応するchange:contentイベントに応答してファイルのコンテンツをレンダリングします
  • 後でモデルにロジックを追加してcontentデータをキャッシュし、キャッシュに新しいデータがある場合は再フェッチしないようにすることができますが、これはすべての機能が正しい場合にのみ追加する必要がある最適化です。

コードサンプルに基づく補足:モデルまたはコレクションコードでDOMを操作しないでください!これはMV*facepalmの失敗です。

于 2013-03-12T17:01:50.327 に答える