2 Stimmen

Wie kann man mehrere Routen auf die gleiche Methode in Backbone JS leiten?

Dies ist mein Routen-Objekt in einer BackboneJS-App:

       routes: {
            ""               : "_navigate",
            "home"           : "_navigate",
            "blog"           : "_navigate",
            "photos"         : "_navigate",
            "notes"          : "_navigate",
            "about"          : "_navigate",
            "singlepost_:id" : "_navigate"
        },

leitet er die Routen auf den _navigate Methode, die wie folgt aussieht:

        _navigate: function(postId) {
            if (postId) {
               // show single entry
               return;
            }

            // show regular entry
        },

Es funktioniert einwandfrei. Allerdings empfinde ich das Objekt "Wiederholte Routen" als lästig.

Meine Frage ist: Gibt es eine bessere Möglichkeit, all diese Routen auf dieselbe Methode zu lenken, ohne sich so oft zu wiederholen?

Danke!

2voto

Trevor Punkte 10791

http://backbonetutorials.com/what-is-a-router/ Sehen Sie sich den Abschnitt über Spritzer an

Alle "*splats" oder ":params" in Routendefinitionen werden als Argumente (in entsprechender Reihenfolge) an die zugehörige Funktion übergeben. Eine Route die als "/:route/:action" definiert ist, übergibt 2 Variablen ("route" und "action") an die Callback-Funktion. (Wenn dies verwirrend ist, bitte einen Kommentar und ich werde versuchen, es besser zu formulieren) Hier sind einige Beispiele für die Verwendung von ":params" und "*splats"

routes: {

        "/posts/:id": "getPost",
        // <a href="http://example.com/#/posts/121">Example</a>

        "/download/*path": "downloadFile",
        // <a href="http://example.com/#/download/user/images/hey.gif">Download</a>

        "/:route/:action": "loadView",
        // <a href="http://example.com/#/dashboard/graph">Load Route/Action View</a>

    },

    getPost: function( id ){ 
        alert(id); // 121 
    },
    downloadFile: function( path ){ 
        alert(path); // user/images/hey.gif 
    },
    loadView: function( route, action ){ 
        alert(route + "_" + action); // dashboard_graph 
    }

1voto

Tomer Lichtash Punkte 8544

Das ist eigentlich ganz einfach.

        routes: {
            "*actions:_id": "_navigate"
        }

Dank an Jason Strimpel von der BackboneJS Google Group.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X