7

関連する質問 -

各モデルのインデックスが0の序数プロパティを維持しながら、コレクション内のモデルを再配置するBackboneJSの最良の方法

コレクション内でモデルを移動するにはどうすればよいですか?

リストに視覚的に表されたバックボーン コレクションがあります。このリストはドラッグ アンド ドロップ可能です。任意のアイテムをコレクション内の任意の位置に移動できます (つまり、並べ替えではありません)。コレクションのネイティブの削除/追加を使用してモデルを適切な場所に配置する例をいくつか見てきました。ただし、バックボーンはモデルが追加されたときに set を内部的に呼び出し、イベントに関連する一連のメソッドを呼び出して最後に並べ替えます。モデルを正しい位置にスプライシングすることの欠点はありますか?

削除/追加: 最初にリンクされた質問の例を参照してください。

スプライス: 2 番目の例

私が現在使用している機能:

    moveTo: function(oldIndex, newIndex){
        oldIndex = oldIndex instanceof Backbone.Model ? this.at(oldIndex) : oldIndex;
        var spliced = this.models.splice(oldIndex, 1);
        this.models.splice(newIndex, 0, spliced[0]);
        this.trigger("move",[oldIndex,newIndex]);
    },
4

1 に答える 1

13

私は最近のプロジェクトのためにこのソリューションを書きました。あなたが説明したものと同様のインターフェースのようです-ソート可能なリスト。このメソッドはコレクションにバインドされています。

reorder: function(new_index, original_index) {
    // If nothing is being changed, don't bother
    if (new_index === original_index) return this;
    // Get the model being moved
    var temp = collection.at(original_index);
    // Remove it
    collection.remove(temp);
    // Add it back in at the new index
    collection.add(temp, { at: new_index });
    return this;
}

私自身のコードのほとんどは削除されましたが、それがコア機能です。Backbone のatオプションを使用すると、これが非常に簡単になります。

于 2013-08-21T18:55:07.757 に答える