MyApp.CatManager =
init: ->
@container = $('#cats')
@collection = {}
add: (cat) ->
@collection[cat.data.id] = cat
@container.append cat.element
remove: (cat) ->
delete @collection[cat.data.id]
cat.element.remove()
all: ->
$.map @collection, (cat) -> cat
get: (id) ->
@collection[id]
arrange: ->
sorted = @all().sort (oa, ob) ->
a = ob.data.name
b = oa.data.name
if (a < b) then -1 else if (a > b) then 1 else 0
$.each sorted, (i, cat) =>
@container.append cat.element
true
Allows you to maintain full control over configuration and of what is going on. I have a question, Angular was built by very smart people at Google that is undeniable. But, does Google use Angular in their products?
I think that if the application needs to be sufficiently complex and the complexity maps to exactly what an existing framework does then you should use the framework that it fits.
This implementation will be incredibly slow for large lists. Every time any one of the elements moves, you will make N dom changes rather than the needed one or two. In an individual case, you can hand-write the faster version. But when you have multiple components like this interacting, knowing how to do a minimal change is not an easy task.
Unless you have experts writing these things by hand, using a framework is the quickest way to minimize performance problems and memory leaks.
I think that if the application needs to be sufficiently complex and the complexity maps to exactly what an existing framework does then you should use the framework that it fits.
Generally often does that happen?