54 lines
1.0 KiB
CoffeeScript
54 lines
1.0 KiB
CoffeeScript
Locomotive.Views.Shared ||= {}
|
|
|
|
class Locomotive.Views.Shared.ListView extends Backbone.View
|
|
|
|
tagName: 'div'
|
|
|
|
_item_views = []
|
|
|
|
initialize: ->
|
|
_.bindAll(@, 'insert_item', 'remove_item')
|
|
@collection.bind('add', @insert_item)
|
|
@collection.bind('remove', @remove_item)
|
|
|
|
template: ->
|
|
# please overide template
|
|
|
|
item_view_class: ->
|
|
# please overide item_view_class
|
|
|
|
render: ->
|
|
$(@el).html(@template()())
|
|
|
|
@render_items()
|
|
|
|
return @
|
|
|
|
render_items: ->
|
|
if @collection.length == 0
|
|
@$('.no-items').show()
|
|
else
|
|
@collection.each (item) =>
|
|
@insert_item(item)
|
|
|
|
insert_item: (item) ->
|
|
klass = @item_view_class()
|
|
view = new klass model: item, parent_view: @
|
|
|
|
(@_item_views ||= []).push(view)
|
|
|
|
@$('.no-items').hide()
|
|
@$('ul').append(view.render().el)
|
|
|
|
remove_item: (item) ->
|
|
@$('.no-items').show() if @collection.length == 0
|
|
view = _.find @_item_views, (tmp) -> tmp.model == item
|
|
view.remove() if view?
|
|
|
|
remove: ->
|
|
_.each @_item_views, (view) => view.remove()
|
|
super
|
|
|
|
|
|
|