Я также работаю над карточной игрой, использующей Backbone.js
на Canvas, и натолкнулся на этот вопрос. То, что я сейчас делаю, это CardView
, у которого el
есть тег холста, так что холст будет создан при инициализации. Все рисование карты выполняется по методу render
этого представления. Однако этот холст не будет добавлен в DOM
.
У меня есть Hand
, то есть Backbone.Collection
для хранения коллекции карт. К этой коллекции прикреплен Backbone.View
, прикрепленный к игровому холсту (единственный и большой в DOM
). Это представление также содержит массив Backbone.View
. Тогда у меня есть:
render: function() {
var that = this;
this.ctx.save();
_(this._views).each(function(view) {
that.ctx.drawImage(view.render().el, 0, 0);
that.ctx.translate(view.el.width, 0);
});
this.ctx.restore();
},
По сути, я рисую холст каждого вида в игровом холсте, используя контекст drawImage
.
I addEventListener
на HandView
холст (который является его el
) для обработки клика. В этом обработчике я проверяю положение мыши относительно CardView
, а затем манипулирую этим видом.
Имейте в виду, я просто экспериментирую с этим, так как я тоже новичок в Backbone.js
. Это может быть худший способ сделать, но я просто надеюсь, что вы можете увидеть один из способов сделать это.
Хотелось бы, чтобы мы могли проверить мышь по холсту, которого нет в DOM. Если это возможно, мы могли бы просто addEventListener
на CardView
холст и позволить ему перевести и перерисовать. Нет необходимости, чтобы холст HandView
просматривал его представления.