Backbone.js hover-Ereignis nicht ausgelöst

Ich versuche zu verwenden Backbone.js für das erste mal und ich habe einige Schwierigkeiten. Ich weiß nicht, ob mein problem ist, dass ich nicht verstehen, wie backbone funktionieren soll oder ob es nur ein code-problem.

Ich versuche zu schaffen, die ein dynamisches Menü, und ich habe kein problem, erstellen Sie die Menüleiste mit den Punkten, aber ich kann nicht das hover-Ereignis auslösen, wenn ich hover eine der Menüoptionen.

Ansichten

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;
    }
});

Modell

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

Startup-code

$(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"}))
    ]);
});

Jede Hilfe wird dankbar sein!

Dank!

Update

Ok, nach der Einnahme der definition von el außerhalb der initialize Methode auf die MenuItemView Ansicht, es funktioniert, ABER das gleiche element wird erneut auf alle Instanzen der Ansicht, so hatte ich, um die Ansicht zu ändern, um Sie den folgenden code, um zu arbeiten, wie ich es möchte:

 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 muss ich clone das element auf eine neue Instanz?

Warum haben Sie beim Klonen der el? Berücksichtigen, wenn $('<li class="menu-item"></li>') ausgewertet wird, und Sie haben Ihre Antwort.
wenn ich das element für el auf die initialize - Methode, dann werden die Ereignisse nicht ausgelöst, wie kann ich das lösen?

InformationsquelleAutor Deleteman | 2012-01-19

Schreibe einen Kommentar