Skip to content
This repository has been archived by the owner on May 17, 2018. It is now read-only.

Can you add a working example like the one we have for 'backbone.paginator'? #1

Closed
skusunam opened this issue Dec 12, 2012 · 14 comments

Comments

@skusunam
Copy link
Member

Can you add an example\sample application (like Netflix or localstorage one)?

It would be easier to understand and also play with some of the features you are claiming this library will solve better than 'backbone.paginator'?

@wyuenho
Copy link
Member

wyuenho commented Dec 13, 2012

Yep. I will add a demo to Backgrid.js today, but at the mean time you can take a look at the README and the QUnit tests. If you are working with Rails, you can just extend PageableCollection with a url, and everything else should just work like a plain Backbone.Collection with some extra methods.

@gilbertwyw
Copy link

Read from the source that the state are checked before making the request.
So if I don't have/know the "totalRecords" when I instantiate a new collection (server mode), does it mean that I need to do it manually inside the parse(), like calculating the "totalPages", "lastPage" and stuffs.

I need these state data to render the pagination UI (may probably try the Backgrid later but i want to use it separately by now).

Please correct me if i'm wrong.
Thanks

@wyuenho
Copy link
Member

wyuenho commented Feb 6, 2013

Generally you should bootstrap your server mode PageableCollection in your server side template, in which you should have a count. If your web page is a static page, you can still omit totalRecords when you instantiate a server mode PageableCollection. states is only checked when totalRecords, pageSize, currentPage and firstPage are all non-null, which is often not the case during instantiation. To grab the first page and update a server mode PageableCollection state after instantiation, issue a fetch to yield the server side states according to the queryParams mapping in the JSON response. No overriding parse is required.

@gilbertwyw
Copy link

Thanks for your promply response. For some reasons, bootstrapping a collection is not feasible in my case.
And I did call fetch() on collection to get the first page.

Here's is my config:
state: {
firstPage: 1,
pageSize: Config.pageSize
},
queryParams: {
currentPage: 'page',
pageSize: 'pageSize',
totalPages: null,
totalRecords: null
},
parse: function(response) {
this.state.totalRecords = response.total;
this.state.totalPages = Math.ceil(this.state.totalRecords / this.state.pageSize);
this.state.lastPage = this.state.totalPages;
return response.data;
}

Do I have to customize the response from the server-side
Please help.

@wyuenho
Copy link
Member

wyuenho commented Feb 6, 2013

totalPages and lastPage will be calculated automatically, you only need to provide totalRecords. If you've nulled out queryParams.totalPages and queryParams.totalRecords, you can still provide a response like this, you just need to manually get total from response[0].total to set state.totalRecords.

@gilbertwyw
Copy link

So you mean either I alter the server response for the fetch request using format like [{ pagination state }, [{}, {} ...]]
or I have to set "totalRecords" (and those depends on it) myself, am I correct?

One more thing, I notice Pageable's Collection.create() no longer trigger "add/request/sync" events when i call . Is it on purpose or any workarounds for that?

@wyuenho
Copy link
Member

wyuenho commented Feb 6, 2013

You need to provide a response format like [{ pagination state }, [{}, {} ...]] and override parse to set state.totelRecords manually since you've nulled out queryParams.totalRecords.

I didn't do anything with the create method and the Backbone.Collection test case for it passes. It should still trigger the appropriate events.

@gilbertwyw
Copy link

That's strange. I read the source that you didnt touch this part but when i switch back to plain old backbone collection, I can see those events(add/request/sync) propagates, which is missing if using Pageable.

Please let me know should you need me to provide more information.
Thanks for your help along the way.

@wyuenho
Copy link
Member

wyuenho commented Feb 6, 2013

File a separate bug report if you believe backbone-pageable is at fault. Please provide a jsfiddle or jsbin link when you do so.

@gilbertwyw
Copy link

Sorry, it's my fault.
I passed the plain old BB collection as dependency instead of the Pageable.

It works fine. Thanks for your help and work.

@wyuenho wyuenho closed this as completed Feb 13, 2013
wyuenho added a commit that referenced this issue Feb 13, 2013
@alanrubin
Copy link

Thanks for the demos. Just wanted to let you know that the Infinite demo seems not to be working now.

@wyuenho
Copy link
Member

wyuenho commented Feb 14, 2013

@alanrubin It seems to work fine here. Github's API has a 60 req/hr rate limit on public access. Did you run out of quota?

@alanrubin
Copy link

The API request returns the correct results. Have you tried in FF ? I have tried with Safari and it works, so probably a FF issue.

@wyuenho
Copy link
Member

wyuenho commented Feb 14, 2013

WTF. Looks like a Firefox bug 608735. Thanks for reporting.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

4 participants