我刚迁移到骨干网并且有一种奇怪的行为
我将draggable附加到由脚本创建的元素,因此不能直接在DOM中使用
编辑:
由于容器已在DOM中,因此创建的元素为.nav
,$("#viewer")
。
在简单的jQuery中,我使用了.on
和mousemove
事件,并且它有效。
使用骨干我在初始化方法中使用相同的方法:
initialize: function(options) {
this.viewer = $("#viewer");
this.viewer.on("mousemove", '.nav', function() {
$(this).draggable();
});
这似乎有效,但只有一次 拖动元素一次后,我再也无法拖动它了。
与事件有冲突吗?我错过了什么吗?
答案 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方法。