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
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…