Ember 2.5 ember-cmi-mirage пытается получить подмножество коллекции

Использование ember 2.5 и ember-cli-mirage 0.2)

В моем mirage/config.js я пытаюсь получить подмножество коллекции для целей нумерации страниц), используя функцию slice()

var books = schema.book.all().slice(startItem, endItem );

но я получаю сообщение об ошибке:

schema.book.all(...).slice is not a function

Я тоже пробовал, та же ошибка

var books = schema.book.all();
var items = books.slice(startItem, endItem );

Вот моя функция экспорта mirage/config.js по умолчанию() { .... this.get('/books', function(schema, request) {

        const pageNumber = request.queryParams['page[number]'];
        const pageSize = request.queryParams['page[size]'];

        const startItem= (pageNumber - 1) * pageSize;
        const endItem = (pageNumber * pageSize) - 1;

        var books = schema.book.all().slice(startItem, endItem );

        ....

        return books;
      });
    }

Кажется, что slice() является функцией ArrayProxy.. однако это может не помочь, как с JSONAPISerializer

Я немного запутался, так как все примеры, которые я могу найти в Google, относятся к Ember 1.13, а не к Ember 2.5...


person Community    schedule 10.05.2016    source источник


Ответы (1)


Это связано с тем, что Collection похожа на массив, но не является истинным массивом. Именно по этой причине в следующей бета-версии мы представим свойство .models, которое имеет базовый массив.

А пока попробуйте вызвать .toArray() для своей коллекции schema.book.all(), а затем вызвать для нее slice.

Чтобы воспользоваться преимуществами слоя сериализатора, обязательно верните новую коллекцию из обработчика:

import Collection from 'ember-cli-mirage/orm/collection';

this.get('/books', (schema, request) => {
  let books = schema.book.all().toArray().slice(...);

  return new Collection('book', books);
});
person Sam Selikoff    schedule 10.05.2016
comment
Спасибо, это то, что я пытался ... и фактически я получаю подмножество «элементов» n, но я не могу вернуть его, так как это не коллекция ... в любом случае, чтобы преобразовать ее обратно в коллекцию ?? - person ; 11.05.2016
comment
да, попробуй import Collection from 'ember-cli-mirage/orm/collection'; 'return new Collection('book', books) - person Sam Selikoff; 11.05.2016
comment
пожалуйста! Если ответ помог, не могли бы вы отметить его правильным для будущих читателей? - person Sam Selikoff; 11.05.2016