Определенные вами события привязаны к свойству el в вашем представлении. В вашем случае это «тело», поэтому, когда вы запускаете клик с двумя экземплярами simpleButton, у вас есть 2 из них, слушающие одно и то же событие.
Каждый экземпляр, который вы создаете, должен представлять один и только один элемент DOM, определенный свойством el. Поэтому, если вы хотите создать вид кнопок (не уверен, что это «лучший метод» в реальной программе), вы можете получить:
SimpleButton = Backbone.View.extend({
template : "<button class='${classes}'>${text}</button>",
tagName : "div", // defines the html tag that will wrap your template
className: ".buttonbox",
...
});
mybtn = new SimpleButton();
mybtn.render().appendTo('body')
Таким образом, ваше событие нажатия будет касаться только одного div.buttonbox, внутри которого находится ваша кнопка.
Примечание: Основная идея функции рендера заключается в создании html-строки, которую вы потом будете использовать для добавления prepend или чего-либо еще в DOM. Таким образом, если вы создаете много, вы можете сделать это, поэтому вы обновляете DOM только один раз (обновление DOM стоит дорого) ...