gpt4 book ai didi

javascript - Backbone.js 悬停事件未触发

转载 作者:搜寻专家 更新时间:2023-11-01 04:45:19 25 4
gpt4 key购买 nike

我是第一次尝试使用 Backbone.js,但遇到了一些麻烦。我不知道我的问题是因为我不了解主干应该如何工作,还是只是代码问题。

我正在尝试创建一个动态菜单,使用它的项目创建主菜单栏没有问题,但是每当我将鼠标悬停在其中一个菜单项上时,我无法触发悬停事件。

观看次数

var MenuView = Backbone.View.extend({
initialize: function(items) {
this.menu = items;
//Main navigation bar
this.el = $("#main-nav");
this.trigger('start');
this.render();
},
render: function() {
var me = this;
_.each(this.menu, function(mi) {
mi.render(me.el);
});
return this;
},
handleHover: function(e) {
console.debug(e);
}
});

var MenuItemView = Backbone.View.extend({
tagName: 'li',
className:'menu-item',
events: { //none of these work
'hover a':'handleHover',
'mouseover a':'handleHover',
'mouseover':'handleHover',
'click': 'handleHover',
'click a': 'handleHover'
},
initialize: function(mi) {
this.menuItem = mi;
this.el = $("<li class=\"menu-item\"></li>")
},
render: function(parent) {
this.el.append('<a href="' + this.menuItem.get("link") + '">' + this.menuItem.get("text") + '</a>');
parent.append(this.el);
return this;
},

handleHover: function(ev) {
console.debug("Hovering! " + ev + this.menuItem.get("cid"));
console.debug(ev);
return false;
}
});

型号

var MenuItem = Backbone.Model.extend({
defaults: {
parent: null,
children: [],
link: "",
text: ""
}
});

启动代码

$(document).ready(function() {
var menu = new MenuView([
new MenuItemView( new MenuItem({link: "/", text: "Home"})),
new MenuItemView( new MenuItem({link: "/", text: "Users"})),
new MenuItemView( new MenuItem({link: "/", text: "Configuration"}))
]);
});

任何帮助将不胜感激!

谢谢!

更新

好的,在 MenuItemView View 的 initialize 方法之外获取 el 的定义后,它起作用了,但是相同的元素在 View 的所有实例上被重用,所以我不得不将 View 更改为以下代码,以使其按我想要的方式工作:

 var MenuItemView = Backbone.View.extend({

events: { //none of these work
'hover a':'handleHover',
'mouseover a':'handleHover',
'mouseover':'handleHover',
'click': 'handleHover',
'click a': 'handleHover'
},
el: $('<li class="menu-item"></li>'),
initialize: function(mi) {
this.menuItem = mi;
this.el = $(this.el).clone(true);
},
render: function(parent) {
this.el.append('<a href="' + this.menuItem.get("link") + '">' + this.menuItem.get("text") + '</a>');
parent.append(this.el);
return this;
},

handleHover: function(ev) {
console.debug("Hovering! " + ev + this.menuItem.get("cid"));
console.debug(ev);
return false;
}
});

我必须在新实例上克隆元素吗?

最佳答案

hover 不是一个普通的事件,而是jquery 提供的一个'便利'事件。它是 mouseenter 和 mouseleave 的组合。

绑定(bind)到 mouseenter 和 mouseleave 而不是 hover 将满足您的需要。

关于javascript - Backbone.js 悬停事件未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8926885/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com