拖拽后为什么我会失去拖拽?

时间:2013-10-02 07:32:36

标签: jquery-ui backbone.js draggable

我刚迁移到骨干网并且有一种奇怪的行为 我将draggable附加到由脚本创建的元素,因此不能直接在DOM中使用 编辑: 由于容器已在DOM中,因此创建的元素为.nav$("#viewer")

在简单的jQuery中,我使用了.onmousemove事件,并且它有效。

使用骨干我在初始化方法中使用相同的方法:

initialize: function(options) {
            this.viewer = $("#viewer");
            this.viewer.on("mousemove", '.nav', function() {
                $(this).draggable();
            });

这似乎有效,但只有一次 拖动元素一次后,我再也无法拖动它了。

与事件有冲突吗?我错过了什么吗?

2 个答案:

答案 0 :(得分:1)

在致电$('#viewer')后,您必须引用render()。 <{1}}之前调用initialize,因此DOM元素不存在。

此外,使用render,它会抓取元素(在this.$('#viewer')之后),即使它尚未附加到您网页的DOM中。

render

更新

为了使这些事情变得更简单,您还可以通过触发事件或事件来自定义Backbone以在渲染后自动调用myView = new ExampleView({ model: myModel }); $(body).append(myView.render().el); myView.onRender(); // ------------- // Now on your view: onRender: function() { this.viewer = this.$('#viewer'); this.viewer.on("mousemove", '.nav', function() { $(this).draggable(); }); }, 函数。

Marionette.js(一个Backbone.js扩展程序)内置了这个,我一直都在使用它。

答案 1 :(得分:1)

最终解决方案非常简单:

确保你不要使用过时版本的backbone.js和下划线!!

在我将版本更新到最新版本后,我使用了它:

render: function() {
  this.viewer.on("mouseover", '.nav', function() {
                if (!$(this).data("init")) {
                    $(this).data("init", true);
                    $(this).draggable();
                }
            });

可能仍然不是很优雅,但我无法从dc2工作中建议使用onRender方法。