我正在尝试使用主干和 jQuery 为原型应用程序制作模型应用程序。在这一点上它非常小。 http://jsfiddle.net/IgnorantUser/u7JkX/
我只有 2 个模型Canvas
和ButtonWidget
. 还有 3 个视图:CanvasView
用于 Canvas 的ButtonInCanvas
视图,用于ButtonWidget 模型ButtonWidget
的虚拟视图ButtonInToolbar
,取而代之的是它从 .button css 类中获取默认值,并用于拖放到画布中,用按钮填充它。
由于会有其他小部件(标签、文本框、图像持有者等...),我采用了在“ButtonInToolbar”视图的上下文中传递由“CanvasView”触发的放置事件处理的方法,方法是使用以下代码:
passDrop: function (e, ui){
if ($(ui.draggable).parent().is('#toolbar')){
ui.draggable.trigger('drop'); //sets the drop in the context of the dragged view (ButtonInToolbar)
}
我面临的问题是我希望能够将ui.position.left
andui.position.top
值传递到ButtonInToolbar
视图中,这样当我调用 dropHandler 方法来附加一个新ButtonInCanvas
视图时,我可以传递放置的位置并将 Button 渲染到它实际的位置掉了。我怎么做?
dropHandler: function () {
$('.canvas').append(new ButtonInCanvas({model: new ButtonWidget}).render().el);
}
我尝试(event, ui)
在上述函数中传递,以便ui.position.left
获得值,但我得到“未捕获的类型错误:无法读取未定义的属性‘位置’”。我该如何解决这个问题?
此外,在上面的代码中,我使用的是画布选择器而不是CanvasView
实例。考虑到将来会有多个CanvasView
,我怎么能关联特定的CanvasView
实例,以便小部件只附加到它而不是所有具有画布类的 DOM 元素中?
更重要的是,由于这是我第一次尝试使用 Backbone,它与“ToDo”应用程序没有太多共同之处,你能指出我的实现中的任何致命错误吗?我做错的事情,或者我本可以以更好/更有效的方式完成