我與backbone.js一起玩耍,我想知道是否有更簡潔的解決方案來創建模型/集合的「無限滾動」情況,而不是模塊I一直在看(有幾個jQuery,可能更適合其他庫)。我想我會在嘗試構建我自己的骨幹解決方案,如果它應該在骨幹集合之外構建的東西,或者如果有人嘗試過類似的東西之前,會問一些搜索。backbone.js的無盡/無限滾動類型解決方案
回答
,如果你還沒有嘗試過SlickGrid可能是一個選項:https://github.com/mleibman/SlickGrid/wiki/Examples
看起來很有趣,我以前見過它,但似乎太重,我現在想要的一些光線使用。 – blueblank 2011-05-23 23:46:29
與骨幹和jQuery路點的另一個解決方案:https://gist.github.com/davidmontoyago/6336612
以下擴展應該工作: https://github.com/joneath/infiniScroll.js
這些也可能是有用的,以部分地加載數據: http://backplug.io/plugin/Backbone.actAs.Paginatable, https://github.com/wyuenho/backbone-pageable,https://github.com/backbone-paginator/backbone.paginator。
我更喜歡在這裏搜索Backbone擴展:http://backplug.io。
另一個重複的答案:這是我Backbone.Collection的延伸:
_.extend Backbone.Collection.prototype,
options:
infinitescroll:
success: $.noop
error: $.noop
bufferPx: 40
scrollPx: 150
page:
current: 0
per: null
state:
isDuringAjax: false
isDone: false
isInvalid: false
loading:
wrapper: 'backbone-infinitescroll-wrapper'
loadingId: 'backbone-infinitescroll-loading'
loadingImg: 'loading.gif'
loadingMsg: '<em>Loading ...</em>'
finishedMsg: '<em>No more</em>'
msg: null
speed: 'fast'
infinitescroll: (options={})->
# NOTE: coffeescript cannot deal with nested scope!
that = @
_.extend(@options.infinitescroll, options.infinitescroll) if options.infinitescroll
infinitescroll_options = @options.infinitescroll
# where we want to place the load message in?
infinitescroll_options.loading.wrapper = $(infinitescroll_options.loading.wrapper)
if !infinitescroll_options.loading.msg and infinitescroll_options.loading.wrapper.size() > 0
infinitescroll_options.loading.msg = $('<div/>', {
id: infinitescroll_options.loading.loadingId
}).html('<img alt="'+$(infinitescroll_options.loading.loadingMsg).text()+'" src="' + infinitescroll_options.loading.loadingImg + '" /><div>' + infinitescroll_options.loading.loadingMsg + '</div>')
infinitescroll_options.loading.msg.appendTo(infinitescroll_options.loading.wrapper).hide()
else
infinitescroll_options.loading.msg = null
fetch_options = _.omit(options, 'infinitescroll')
infinitescroll_fetch =()=>
# mark the XHR request
infinitescroll_options.state.isDuringAjax = true
# increase page count
infinitescroll_options.page.current++
payload = {
page: infinitescroll_options.page.current
}
payload['limit'] = infinitescroll_options.page.per if infinitescroll_options.page.per isnt null
_.extend(fetch_options, {
remove: false
data: payload
})
if infinitescroll_options.loading.msg
# preload loading.loadingImg
(new Image()).src = infinitescroll_options.loading.loadingImg if infinitescroll_options.loading.loadingImg
infinitescroll_options.loading.msg.fadeIn infinitescroll_options.loading.speed,()->
that.fetch(fetch_options)
.success (data, state, jqXHR)=>
infinitescroll_options.state.isDuringAjax = false
infinitescroll_options.state.isDone = true if _.size(data) is 0
infinitescroll_options.loading.msg.fadeOut infinitescroll_options.loading.speed,()->
infinitescroll_options.success.call(data, state, jqXHR) if _.isFunction(infinitescroll_options.success)
return
return
.error (data, state, jqXHR)=>
infinitescroll_options.state.isDuringAjax = false
infinitescroll_options.state.isInvalid = true
infinitescroll_options.loading.msg.fadeOut infinitescroll_options.loading.speed,()->
infinitescroll_options.error.call(data, state, jqXHR) if _.isFunction(infinitescroll_options.error)
return
return
return
else
that.fetch(fetch_options)
.success (data, state, jqXHR)=>
infinitescroll_options.state.isDuringAjax = false
infinitescroll_options.state.isDone = true if _.size(data) is 0
infinitescroll_options.success.call(data, state, jqXHR) if _.isFunction(infinitescroll_options.success)
return
.error (data, state, jqXHR)=>
infinitescroll_options.state.isDuringAjax = false
infinitescroll_options.state.isInvalid = true
infinitescroll_options.error.call(data, state, jqXHR) if _.isFunction(infinitescroll_options.error)
return
return
$(document).scroll()->
$doc = $(document)
isNearBottom =()->
bottomPx = 0 + $doc.height() - $doc.scrollTop() - $(window).height()
# if distance remaining in the scroll (including buffer) is less than expected?
(bottomPx - infinitescroll_options.bufferPx) < infinitescroll_options.scrollPx
return if infinitescroll_options.state.isDuringAjax || infinitescroll_options.state.isDone || infinitescroll_options.state.isInvalid || !isNearBottom()
infinitescroll_fetch()
return
infinitescroll_fetch()
return
您可以使用胖箭頭=>而不是細箭頭,並將外部背景帶到@或_this – 2014-05-19 23:45:06
- 1. 無盡無限滾動型
- 2. Rails3.1無限/無盡滾動
- 3. RecyclerViewPagination無盡的無限滾動問題
- 4. Rails無盡頁面/無限滾動
- 5. 無盡的滾動表,無限的/連續的滾動jQuery
- 6. 解決方案無效persistence.xml
- 7. 輕量級無限滾動與backbone.js
- 8. jQuery的自動滾屏解決方案
- 9. VerticalGridFragment無盡滾動
- 10. RecyclerView無盡滾動
- 11. 無盡的ListView裏面滾動型
- 12. 無盡的滾動監聽
- 13. 無盡的滾動gridview?
- 14. 無盡的滾動ListView
- 15. 無盡滾動的硒
- 16. Three20的TTScrollView無盡滾動?
- 17. ASP.Net中的無盡滾動(無限滾動)使用jQuery AJAX的ASPXGridView
- 18. 我該如何修復無盡的滾動,以便它可以做無盡/無限滾動?
- 19. backbone.js無效滾動/分頁
- 20. PHP無限循環過程;這是好的解決方案嗎?
- 21. for org.codehaus.jackson.map.JsonMappingException的解決方案:無限遞歸(StackOverflowError)
- 22. 無限循環在適當的解決方案
- 23. 數據倉庫類型解決方案?
- 24. 如何刪除冗餘類型限定符解決方案?
- 25. 無限滾動
- 26. ASP.NET MaskedEditExtender&TextBox:無法輸入零,解決方法?解決方案?
- 27. 解決方案的根類
- 28. 爲什麼動態類型的擴展方法無法解決?
- 29. 無法打開Visual Studio解決方案
- 30. 無法在另一種解決方案
這很有趣,我會考慮它。 – blueblank 2011-05-23 23:48:05
我剛寫了一個無限的滾動教程也http://backbonetutorials.com/infinite-scrolling/ – 2012-04-28 04:18:18
這篇文章給出了很好的觀點。不過,我個人認爲,不要爲非js回退而感到不適。http://developer.yahoo.com/blogs/ydn/many-users-javascript-disabled-14121.html – albertpeiro 2013-04-28 10:15:22