I think I now understand backbone views. The one thing that caught me out was when .html() is called it implicitly calls .empty() which removes all of the onclicks. You have to use setElement to bypass this. This requires you to dynamically create the divs each time. Glad that's over.