0

いくつかのパスがあります。パスの深さと量に制限はありません。

私はバックボーンを使用し、サーバーからデータを取得しています。各モデルにはパスフィールドが含まれています。例:

"/home/harry/"
"/home/sally/"
"/home/sally/personal"
"/home/harry/files"
"/home/harry/photos"
"/home/harry/videos"
"/home/harry/files/documents"
"/home/harry/files/personal"
"/home/harry/photos/2012"
"/home/harry/photos/2011"
"/home/harry//videos/2012"
"/home/harry/videos/edited"
"/home/harry/videos/edited/other/trash_this"

モデルをグループ化して、Web アプリでファイル構造を表すことができるようにしたいと考えています。これにより、「ホーム」をクリックすると、すべての相対ディレクトリなどが一覧表示されます。したがって、そのフォルダー/ディレクトリにファイルまたはディレクトリがなくなるまで、構造をさらにクリックできます。

4

1 に答える 1

0

1 つの解決策は、これらのパスを一連のコレクションに解析することです。何かのようなもの:

var home = new PathCollection({});
_(models).each(function(model) {
    if (model.get('path').indexOf('/home/') == 0) {
        model.set('relativePath', model.get('path').substr(6)) ; ditch '/home/'
        home.add(model);
    }
}

次に、PathCollection 内で add メソッドをオーバーライドして、同様のことを行うことができます (つまり、モデルの相対パスの最初の部分を見て、適切なコレクションに追加します)。

var PathCollection = Backbone.Collection.extend({
    add: function(model) {
        // NOTE: This is naive; a real add would need to accept multiple models
        if (model.get('relativePath').indexOf('harry/') == 0) {
             // create harry collection if it doesn't exist
             if (!this.harry) this.harry = new PathCollection();
             this.harry.add(model);
        } 
    }
})

もちろん、indexOf特定のパスに対して特定のチェックを行うのではなく、より一般的なものにして、「/」文字で分割することをお勧めしますが、アイデアが得られることを願っています。ポイントは、メンバー モデルのパスをチェックするコレクションを作成し、必要に応じてそれらを他のコレクションに追加する場合、1 日の終わりには、入れ子になった一連のコレクションが作成されるということです。

それができたら、どのモデルがどのパスに該当するかを確認すると、自明になります。たとえば、/home/harry/ パスの下にあるモデルを取得するには、次のようにします。

home.harry.models;
于 2013-01-23T21:18:24.413 に答える