私はBackbone.jsを初めて使用しようとしていますが、何か問題があります。私の問題は、私がバックボーンの働きを理解していないか、単なるコードの問題であるかどうか分かりません。Backbone.jsホバーイベントがトリガーされない
私はダイナミックメニューを作成しようとしていますが、項目でメインメニューバーを作成するのに問題はありませんが、メニュー項目の1つをホバーするたびにホバーイベントをトリガーすることはできません。
ビュー
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ビューにinitialize
方法のel
外の定義を取って、それは動作しますが、その同じ要素がビューのすべてのインスタンスに再利用されますので、後に、私は変更しなければならなかった
更新は
[OK]を、次のコードを視野に、それは私がそれ望むように動作させるために:
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