docs: function (view, options) {
        // `paginate` will return a new `List` from the same parent constructor
        var Parent = this.constructor;
        // New "pages" in the list will use the `View` constructor
        var View = view.constructor;
        // ensure that items being paginated are the same as this List's items.
        var Item = this.get('Item');
  
        var opts = options || {};
        var keys = Object.keys(this.keyMap);
        var items = this.items.map(function (item, i) {
          item.key = keys[i];
          return item;
        });
  
        var len = items.length, i = 0, pageNum = 1;
        var totalPages = Math.ceil(len / opts.limit);
        var self = this;
  
        // helper function to create a new page to put into the returned list.
        function createPage() {
          var page = new View(view.clone(), lazy.extend({}, view.options, opts));
          page.data.pagination = new Parent(lazy.extend({}, self.options, {Item: Item}));
          return page;
        }
  
        function updateProperties(page) {
          page.data.pagination.collection = self.options.collection;
          page.data.pagination.first = 1;
          page.data.pagination.prev = pageNum === 1 ? 1 : pageNum;
          page.data.pagination.num = pageNum++;
          page.data.pagination.next = pageNum >= totalPages ? totalPages : pageNum;
          page.data.pagination.last = totalPages;
          page.data.pagination.index = page.data.pagination.num;
          page.data.pagination.limit = opts.limit;
          page.data.pagination.total = totalPages;
        }
  
        // Create a new list: `pages`
        var pages = new Parent(lazy.extend({}, this.options, opts, {Item: View}));
        var page = createPage();
  
        while (len--) {
          var item = items[i++];
          // each item being paginated will go into the pagination list
          // for the current page
          page.data.pagination.item(item.key, item);
          if (i % opts.limit === 0) {
            updateProperties(page);
            pages.item('page-' + (pageNum-1), page);
            page = createPage();
          }
        }
  
        if (i % opts.limit !== 0) {
          updateProperties(page);
          pages.item('page-' + (pageNum-1), page);
        }
  
        return pages;
      }