Ember.js: How to refresh parent route templates in a nested route scenario? -


my page layout (application template) looks (simplified):

ember page layout

i use different routes (offer list + offer detail, customer list + customer detail). lists shown in sub-navigation outlet.

my router's code:

app.router.map(function () {     //...     this.resource('offers', function () {         this.resource('offer', { path: '/:offer_id' });     }); } 

my routes:

app.offersroute = ember.route.extend({    model: function () {        return app.offer.find();    },    rendertemplate: function (controller, model) {        this.render('offer-list', {             into: 'application', outlet: 'sub-navigation', controller: 'offers' });        this.render('offer-list-title', { into: 'application', outlet: 'page-title' });        this.render('offer-list-content', { into: 'application' });    } });  app.offerroute = ember.route.extend({    model: function (params) {       return app.offer.find(params.offer_id);    },    rendertemplate: function () {       this.render('offer-title', { into: 'application', outlet: 'page-title' });       this.render('offer-content', { into: 'application' });    } }); 

now works far.

http://.../#/offers 

shows list , title "offer summary" , static html content. click on 1 of offers in list, going to

http://.../#/offers/23 

all okay: still shows list of offers in sub-navigation area , correct title , content of offer.

now problem:

if return

http://.../#/offers 

page (using #linkto helper on menu), {{outlet}} / content area becomes empty (not static html before) , title still title in {{page-title}} of offer/23 route.

how can let app "re-render" template defined in offersroute rendertemplate()?

p.s.: i'm using ember.js 1.0.0-rc.3

using built-in index routes , maintaining applicationroute -> offersroute -> offerroute hierarchy solve issue.

if turn on router transition logging see when navigating offers entering offers.index route:

app = ember.application.create({   log_transitions: true }); 

this means can set static offers title , set static offers content in offersindexroute , correctly set first time , set again if link inside of offer detail page. work must preserve applicationroute -> offers -> offer {{outlet}} hierarchy not directly rendering applicationroute's {{outlet}}. reason must preserve hierarchy rendering child (offer template) directly application template remove offers template , when try go offersroute template has been removed , shows nothing.

index route

use offersindexroute fill in applicationroute's {{outlet}} , {{outlet page-title}}.

js:

//this renders title , main content offers app.offersindexroute = ember.route.extend({   rendertemplate: function (controller, model) {     this.render('offer-list-title', { into: 'application', outlet: 'page-title' });     this.render();   } });  app.offersroute = ember.route.extend({    model: function () {        return app.offer.find();    },    rendertemplate: function (controller, model) {      this.render('offer-list', {           into: 'application', outlet: 'sub-navigation', controller: 'offers' });       // render in offersindexroute instead      //this.render('offer-list-title', { into: 'application', outlet: 'page-title' });       this.render('offer-list-content', { into: 'application' });    } }); 

handlebars:

<script type="text/x-handlebars" data-template-name="offer-list-content">   {{outlet}} </script>  <script type="text/x-handlebars" data-template-name="offers/index">   offers content </script>   

the outlet in offers-list-content filled in offersindexroute or offer template, depending on current route is.

maintaining {{outlet}} hierarchy

allow offerroute render it's content template offersroute template instead of forcing applicationroute.

app.offerroute = ember.route.extend({    model: function (params) {       return app.offer.find(params.offer_id);    },    rendertemplate: function () {      this.render('offer-title', { into: 'application', outlet: 'page-title' });       // preserve hierarchy , render offers {{outlet}}, default      //this.render('offer-content', { into: 'application' });      this.render('offer-content');    } }); 

working jsbin example


Comments

Popular posts from this blog

linux - Does gcc have any options to add version info in ELF binary file? -

android - send complex objects as post php java -

charts - What graph/dashboard product is facebook using in Dashboard: PUE & WUE -