Search code examples
javascriptbackbone.jsquery-stringbackbone-routing

How to get url parameters in Backbone?


I'm using Backbone with Marionette.

I have a link <a> tag where I'm passing few parameters, how can I extract those values in other pages using Backbone?

<a href="http://localhost.com:8080/help/?name=matth&age=25&[email protected]">View Details</a>

Address Bar url:

http://localhost.com:8080/help/?name=matth&age=25&[email protected] 44

Using Php, this is straightforward:

$Url = $_GET['state']."#".$_GET['city']; 

How can I achieve it within my Backbone app?


Solution

  • If the route is defined with something like this:

    'help/:name&:age&:email' : 'help'
    

    Then you can access those params in the help function just by defining them in the signature of the method (within the backbone router),

    help: function(name, age, email) {
        // do whatever you want with the params
    }
    

    In your case, this will give you params like this:

    name="XXX" age="XXX"
    

    So the proper routing would be

    'help/?(name=:name)(&age=:age)(&email=:email)' : 'help'
    

    Where parentheses make a part optional.

    Backbone docs

    Routes can contain parameter parts, :param


    Note that the order is important and the following url wouldn't trigger the route callback. Notice the email and age params placement.

    help/?name=test&email=test%40example.com&age=6
    

    In order to trigger a route regardless of the number of params and their ordering, take a look at how to parse the query string in the route function, but that won't always work.