0

わかりましたので、私は特定のモデルのオブジェクトで満たされたコレクションを持っています.

App.Collections.Tasks = Backbone.Collection.extend({
model: App.Models.Task,
comparator: function(model) 
{
  return model.get("date") + model.get("priority");
}
});

これは私の出力です:

Get to the party  Edit Delete 1 Fri Feb 1
Get to the party  Edit Delete 2 Mon Jan 28
Go to the store  Edit Delete 4 Mon Jan 28
Go to the mall  Edit Delete 3 Tue Jan 29
Get to the party  Edit Delete 3 Tue Jan 29
Get to the party  Edit Delete 5 Tue Jan 29
Get to the party  Edit Delete 2 Wed Jan 30
Get to work  Edit Delete 5 Wed Jan 30

2 月の日付が最後になるように、以前の日付を常に一番上に表示したいのですが、どうすればこれを達成できますか?

ありがとう!

4

1 に答える 1

1

あなたはそのようにそれを行うことができます:

comparator: function(model1, model2) {
    return (model1.get("date") + model1.get("priority")) -
        (model2.get("date") + model2.get("priority"));
}

ドキュメントによると、戻り値は-1、0、または1である必要がありますが、それは以前は必須ではなく、どの値でもうまくいく可能性があります。

編集

comparator: function(model1, model2) {
    var comp = (model1.get("date") + model1.get("priority")) -
        (model2.get("date") + model2.get("priority"));
    if (comp < 0) {
        return -1;
    } else if (comp > 0) {
        return 1;
    } else {
        return 0;
    }
}

これで、コードは前述の仕様に正確に従います。これで問題が解決しなかった場合、問題はコンパレータにありません。

編集

愚かな私。私はあなたがUNIX時間を保存していると仮定しましたdateが、どうやらそうではありません。文字列を減算するとNaNが得られるため、実際には並べ替えは行われません。したがって、ここで行う必要があるのはdate、UNIX時間形式(または少なくとも同様のもの)にキャストすることだけです。そうすれば、機能するはずです。

于 2013-01-28T18:02:18.220 に答える