I have a link that looks like this
index.html#/calendar/year/month
This is how I set up my routes:
App.Router.map(function(
Oposite from what I said in the comments, this can actually be done without the need of nested routes, using the Route#serialize.
I've made this fiddle (demo here) with a scenario similar to what you described:
In the application, I'm storing the month and year arguments
window.App = Ember.Application.create({
title: 'Cool App',
calendar: {
month: new Date().getMonth()+1,
year: new Date().getFullYear()
}
});
Defined the routes
App.Router.map(function() {
this.route("home");
this.resource('calendar', { path: 'calendar/:year/:month'});
});
In the calendar route, I've added the serialize
method, to translate the properties in obj
to the app, then I connected with 3rd party lib in setupController
to get the days
property and set its content.
App.CalendarRoute = Em.Route.extend({
activate: function() {
$(document).attr('title','Events')
},
serialize: function(obj) {
return {
year: obj.year, month: obj.month
}
},
setupController: function(controller, model) {
var obj = {
days: calendar.getDaysInMonth(model.month, model.year),
year: model.year,
month: model.month
};
controller.set('content', obj);
}
});
In Handlebars, using a {{linkTo}}
helper, I am passing the calendar
property defined in my App
class as the argument:
{{#linkTo calendar App.calendar tagName="li"}}
<a {{bindAttr href="view.href"}}>
Calendar
</a>
{{/linkTo}}
This will generate a link to ~/#/calendar/2013/4
The router is for more than a url manager. It manages the state for the entire application. In order to fully help you it would be better to see more code. Have you created routes? Are you just trying to go to a 'url' that is not handled by the ember app?
this.transistionTo(routeName)
expects to receive a named route as far a I know. It will then generate the correct url for that route. If you have not setup any routes then I don't think you are able to use it.