我想第一次使用Backbone.js,我遇到了一些麻烦。我不知道我的问题是不是我不了解骨干网应该如何工作,或者它只是一个代码问题。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"}))
]);
});
任何帮助将不胜感激!
谢谢!
更新
好,服用el
外initialize
方法的定义上MenuItemView视图后,它的工作原理,但相同的元素得到重用的视图的所有实例,所以我不得不改变为了视图到下面的代码,使其工作的方式,我希望它:
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;
}
});
WNY我必须克隆一个新实例的元素?
你为什么要克隆你的'el'?考虑'$('
')'是否被评估,你会得到你的答案。 –如果我在'initialize'方法中为'el'创建元素,那么事件不会被触发,我该如何解决这个问题? – Deleteman