Frage

Ich bin relativ neu für JavaScript und Backbone. Ich hacke auf einer einfachen, Anfänger-Backbone-App. Ich habe zwei Ansichten: Zuhause und Neusetzung. Von zu Hause aus, klicke ich auf "Neuer Eintrag", um Newentrumy zu rendern. Von Newentry, ich klicke auf "Abbrechen", um nach Hause zu rendern. Also möchte ich gerne zwischen Home und Newentry wechseln, indem ich auf "Abbrechen" und "Neuer Eintrag" klickt.

es funktioniert jedoch nicht. Das ist das, was ich zu tun habe:

    .
  1. auf home, klicken Sie auf "Neue Eintrag". Newentry rendert ordentlich.
  2. In Newentrum, klicken Sie auf "Abbrechen". Home rendert ordentlich.
  3. auf home, klicken Sie auf "Neue Eintrag". Newentry rendert wieder richtig.
  4. In Newentrum, klicken Sie auf "Abbrechen". Zuhause rendert nicht. Die mit dem Click-Event verknüpfte Methode brennt kein zweites Mal.

    Ich bin extrem stumpiert! Ich kann nicht herausfinden, warum. Ich möchte herausfinden, ob ein anderes Ereignis abfeuert, aber ich weiß nicht, wie. Weiß jemand, was ich tun sollte?

    Javascript: generasacodicetagpre.

    html:

    var Views = {
        Home: Backbone.View.extend({
            template: $('#homeview-template').template(),
            initialize: function() {
                this.entries = new Collections.Entries();
                this.entries.on('all', this.render, this);
                this.entries.fetch();
            },
            render: function() {
                var currDate = getCurrentDate();
                var innerHtml = $.tmpl(this.template, {
                    currDate: currDate
                });
                this.$el.html(innerHtml);
                return this;
            }
        }),
    
        NewEntry: Backbone.View.extend({
            template: $('#newentryview-template').template(),
            events: {
                'click button#cancel-new-entry': 'cancelNewEntry',
                'all': 'logEvents'
            },
            initialize: function() {
                // currently, do nothing
            },
            render: function() {
                var innerHtml = $.tmpl(this.template);
                this.$el.html(innerHtml)
                return this;
            },
            cancelNewEntry: function() {
                console.log("test 1");
                window.router.showHome();
            },
            logEvents: function(evnt) {
                console.log("works");
                console.log("event", evnt);
            }
        })
    };
    
    var Router = Backbone.Router.extend({
        initialize: function(inputs) {
            this.homeView = new Views.Home();
            this.newEntryView = new Views.NewEntry();
            this.el = inputs.el
        },
    
        routes: {
            "": 'showHome',
            "#": 'showHome',
            'new': 'writeNewEntry'
        },
        showHome: function() {
            this.el.empty();
            this.navigate("");
            this.el.append(this.homeView.render().el);
        },
        writeNewEntry: function() {
            this.el.empty();
            this.navigate('new');
            this.el.append(this.newEntryView.render().el);
        }
    });
    

War es hilfreich?

Lösung

Dies behebt wahrscheinlich Ihr Problem: generasacodicetagpre.

Wenn Sie jedoch keine Ansichten wiederverwendet haben, empfehle ich Ihnen, die Ansicht direkt auf der Methode WritenEntry anstelle der Initialisierung zu instanziieren, auf diese Weise müssen Sie auf diese Weise nicht manuell delegateEvents anrufen: generasacodicetagpre.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top