David
David

Reputation: 11

iron:router syntax Layout

I am using iron router to render a template within meteor framwork, as i was following probably an outdated tutorial, it seems to me there is a change in syntaxes which i could not figure out.

layout.html

<div class="container">
    <div class="row">
        <div class="span2">
            <p>cell</p>
        </div>
            <div class="span7">
                <p>cell</p>
            </div>
                <div class="span3">
                    <p>cell</p>
                </div>
    </div>
</div>

index.js

function.setDefault ('category', null );
Router.configure({
    layoutTemplate:'layout',
    yieldTemplates:{
        'products':{to:'products'},
        'cart':{to:'cart'},
        'categories':{to:'categories'}
    }
    });
Router.route(function(){

    this.route('/', layout);
    this.route('/products',{
        data:function(){
            Session.set('category',this.params.name);

    },
    template:'layout',
    path:'/:name'
    })
});

The following error occurs unexpected token (1:8)

Upvotes: 1

Views: 36

Answers (1)

Philip Pryde
Philip Pryde

Reputation: 940

Where you have Router.route and use this.route in a function, Router.route should read Router.map however this is deprecated in favour of Router.route (without the map wrapper) as below:

Session.setDefault ('category', null );           

Router.configure({ 
    layoutTemplate:'layout', 
    yieldTemplates:{ 
        'products':{to:'products'}, 
        'cart':{to:'cart'}, 
        'categories':{to:'categories'} 
    } 
}); 
//You will need to declare a template at the least here so it knows what to render to main area
Router.route('/', {template: "template_name"); 
Router.route('/products/:name',{ 
    onBeforeAction:function(){ 
        Session.set('category',this.params.name); 
        this.next ();
    }, 
    //you don't need this to be layout
    //as you are defining a default layout above 
    //but you will need to specify a template for the main yield area
    template:'template_name'
    // you don't need to specify path here as it will use '/products'
    //if you want to specify a route name use line below
    //,name: 'routename'
});

Where url would be /products/product_name

Where template_name is the template you want to render in your main {{> yield}}

In your layout template you need to place the following for your yields wherever you want to display them

{{> yield 'products'}}
{{> yield 'categories'}}
{{> yield 'cart'}}
{{> yield }} //this is the template you specify in template: 'template_name'

(Done from my phone so can't test but can update later if it doesn't work for you)

Upvotes: 0

Related Questions