Ember router: how to use transitionTo

前端 未结 2 1060
孤街浪徒
孤街浪徒 2020-12-10 09:28

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(         


        
2条回答
  •  独厮守ぢ
    2020-12-10 09:43

    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"}}
        
            Calendar
        
    {{/linkTo}}
    

    This will generate a link to ~/#/calendar/2013/4

提交回复
热议问题