diff --git a/backbone-associations/backbone-associations-tests.ts b/backbone-associations/backbone-associations-tests.ts index a75c6702ec..36dc6cbe87 100644 --- a/backbone-associations/backbone-associations-tests.ts +++ b/backbone-associations/backbone-associations-tests.ts @@ -41,7 +41,7 @@ namespace Backbone.Associations.Tests { } class Locations extends Backbone.Collection { - comparator(c: Backbone.Model) { + comparator = (c: Backbone.Model) => { return c.get("Number"); } } diff --git a/backbone/backbone-global.d.ts b/backbone/backbone-global.d.ts index 83004bd23b..be849cee04 100644 --- a/backbone/backbone-global.d.ts +++ b/backbone/backbone-global.d.ts @@ -192,8 +192,10 @@ declare namespace Backbone { fetch(options?: CollectionFetchOptions): JQueryXHR; - comparator(element: TModel): number; - comparator(compare: TModel, to?: TModel): number; + /** + * Specify a model attribute name (string) or function that will be used to sort the collection. + */ + comparator: string | ((element: TModel) => number | string) | ((compare: TModel, to?: TModel) => number); add(model: {}|TModel, options?: AddOptions): TModel; add(models: ({}|TModel)[], options?: AddOptions): TModel[]; diff --git a/backbone/backbone-tests.ts b/backbone/backbone-tests.ts index 3b34710a40..3669a6c4e1 100644 --- a/backbone/backbone-tests.ts +++ b/backbone/backbone-tests.ts @@ -120,6 +120,16 @@ class Library extends Backbone.Collection { // This model definition is here only to test type compatibility of the model, but it // is not necessary in working code as it is automatically inferred through generics. model: typeof Book; + + constructor(models?: Book[] | Object[], options?: any) { + super(models, options); + + // Test comparator allowed types. + this.comparator = "title"; + this.comparator = (model: Book) => { return 1; }; + this.comparator = (model: Book) => { return "Title"; }; + this.comparator = (model1: Book, model2: Book) => { return 1; }; + } } class Books extends Backbone.Collection { }