Skip to content

Instantly share code, notes, and snippets.

@t2k
Last active August 29, 2015 14:08
Show Gist options
  • Save t2k/dc5300be5343524656fa to your computer and use it in GitHub Desktop.
Save t2k/dc5300be5343524656fa to your computer and use it in GitHub Desktop.
Endless scroll with single key value filter Backbone collection AMD support
#AMD MODULE
define ["entities/_backbone", "msgbus", "moment"], (_Backbone, msgBus, moment) ->
#LP==loan processing model
class LP extends _Backbone.Model
defaults:
"SAPCML": null
"TradeID": null
"Savedate": null
"ChangeOutstanding": 0
urlRoot:"/zd-api/lp"
class LPEntities extends _Backbone.Collection
model: LP
url:"/zd-api/lp"
initialize: ->
@filter = null
@take = 20
@skip = 0
@loading = false
@theEnd = false
setFilter: (filter={}) ->
@filter = filter
setPage: (page)->
@skip = page
setPageSize: (size)->
@take = size
parse: (resp) ->
@theEnd = resp.length < @take
resp
# endless scroll support
fetchMore: ->
return true if (@loading or @theEnd)
@loading = true
@skip++
options =
take: @take
skip: @skip * @take
_.extend options, @filter
loaded = @fetch
remove: false
data: options
$.when(loaded).then =>
@loading = false
_coll = new LPEntities
API =
newLP:->
new LP
getLP:(id)->
model = new LP
id: id
model.fetch()
model
fetchMore:->
_coll.fetchMore()
getLPEntities: (options={}, filter={})->
{skip,take} = options
_coll.setPage skip
_coll.setPageSize take
_coll.setFilter filter
_.extend options, filter
_coll.fetch
reset: true
data: options
_coll
msgBus.reqres.setHandler "new:lp:entity",->
API.newLP()
msgBus.reqres.setHandler "lp:entity", (id) ->
API.getLP id
msgBus.reqres.setHandler "lp:entities", ->
API.getLPEntities
skip: 0
take: 20
# endless scroll support
msgBus.reqres.setHandler "lp:fetch:more", ->
API.fetchMore()
msgBus.reqres.setHandler "lp:filter:date", (date)->
API.getLPEntities
skip: 0
take: 20
,
key: "savedate"
value: moment(date).format("YYYY-MM-DD")
msgBus.reqres.setHandler "lp:filter:port", (port)->
API.getLPEntities
skip: 0
take: 20
,
key: "portfolio"
value: port
msgBus.reqres.setHandler "lp:filter:id", (id)->
API.getLPEntities
skip: 0
take: 20
,
key: "id"
value: id
msgBus.reqres.setHandler "lp:filter:type", (type)->
API.getLPEntities
skip: 0
take: 20
,
key: "type"
value: type
@t2k
Copy link
Author

t2k commented Nov 4, 2014

client side stuff. Used in a .NET WebAPI back end stack.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment