我也在使用Canvas上的Backbone.js
进行纸牌游戏,并且遇到了这个问题。我目前正在做的是有一个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
游戏画布。
我addEventListener
到HandView
的画布(这是它的el
)来处理点击。在这个处理程序中,我检查对应的鼠标位置,然后操纵该视图。
你要知道,这仅仅是什么我尝试,因为我是新来的太Backbone.js
。这可能是最糟糕的方式,但我希望你能看到其中的一种方法。
我希望我们能检查鼠标对不存在于DOM的画布。如果可能的话,我们只需addEventListener
至CardView
的画布,然后让它翻译并重新渲染。不需要HandView
的画布循环显示其视图。
这就是我开始学习的结论。所以基本上我需要将所有命中测试和画布绘制代码放在Backbone.Model中?或者你认为扩展Backbone.View以获得画布引用而不是'el'引用是有意义的吗? – 2011-05-30 20:53:31
我不会扩展'Backbone.View',但我会问:从我的模型类中分离出我的视图类是否有好处?换句话说,是否有不止一种方法来绘制特定的模型,或者有多种类型的模型可以使用相同的画布代码?如果是这样,那么使用'Backbone.Model'和你自己的'CanvasView'类;如果没有,只要让每个'Backbone.Model'子类都包含自己的画布代码就会更简单,正确的MVC就会被诅咒。 – 2011-05-30 23:22:45