2012-08-27 12 views
42

Ho una domanda, che avrà uno strato di vista organizzato in tre parti:Ember.js multipla, di nome utilizzo presa

  1. Sidebar
  2. Toolbar-sinistra
  3. Toolbar-destra

Ho passato poche ore a cercare di trovare qualcosa di utile con google, ma non ho avuto fortuna. Avrei bisogno di un esempio di applicazione breve e completo su come farlo usando Router e connectOutlet, con le prese denominate.

Thx ahead.

risposta

6

AGGIORNAMENTO: Questo codice è obsoleto, a causa delle modifiche di Ember api.

Ho raggiunto un punto, dove posso dire che ho trovato la soluzione che è meglio per me.

<script type="text/x-handlebars" data-template-name="application"> 
<div class="container"> 
    <div class="toolbar">{{outlet toolbar}}</div> 
    <div class="main">{{outlet dashboard}}</div> 
    <div class="sidebar">{{outlet sidebar}}</div> 
</div> 
</script> 

Utilizzando tale modello di applicazione, posso scegliere dove visualizzare le viste. Come questo:

App.router = Ember.Router.create({ 
    enableLogging: true, 
    location: 'history', 
    root: Ember.Route.extend({ 
     index: Ember.Route.extend({ 
      route: '/admin/', 
      redirectsTo: 'login' 
     }), 
     login: Ember.Route.extend({ 
      route: '/admin/login/', 
      doLogin: function(router, context) { 
       "use strict"; 
       router.transitionTo('dashboard', context); 
      }, 
      connectOutlets: function (router, context) { 
       "use strict"; 
       router.get('applicationController').connectOutlet('login', "login"); 
      } 
     }), 
     dashboard: Ember.Route.extend({ 
      route: '/admin/dashboard/', 
      doLogout: function(router, context) { 
       "use strict"; 
       router.transitionTo('login', context); 
      }, 
      connectOutlets: function (router, context) { 
       "use strict"; 
       router.get('applicationController').connectOutlet('sidebar', 'sidebar'); 
       router.get('applicationController').connectOutlet('toolbar', 'toolbar'); 
       router.get('applicationController').connectOutlet('dashboard', 'dashboard'); 
      } 
     }) 
    }) 
}); 

ho i tre punti di vista, che non sono importanti dal punto di vista la soluzione, quelli ottenere resi ai loro punti vendita.

Spero che questo aiuti gli altri.

+9

Devo dire che questo codice non funziona più con la versione più recente di Ember. –

+0

Sarebbe bello sapere perché la risposta è stata downvoted. –

11

Nel modello di applicazione, è necessario dichiarare una presa denominata come {{outlet sidebar}}. Allo stesso modo per le barre degli strumenti che hai menzionato.

MODIFICA: il resto non è aggiornato. Come ha detto @dineth, vedere Rendering a Template.

Poi, nel tuo percorso (diciamo App.NavigationView è ciò che si vuole attaccare lì): Esempio

App.Router = Em.Router.extend({  
    root: Em.Route.extend({ 
     index: Em.Route.extend({ 
      route: '/', 
      connectOutlets: function(router) { 
       router.get('applicationController').connectOutlet('sidebar', 'navigation'); 
      } 
     }) 
    }) 
}); 

Sidebar: http://jsfiddle.net/q3snW/7/

riferimento this documentation sul {{outlet}} aiutante, e this documentation sul .connectOutlet callback .

+1

L'esempio di jsfiddle ha aiutato. Penso di aver finalmente capito il punto. –

+1

A proposito, la documentazione non è affatto buona, manca la cosa più importante che bisogna capire: il contesto. –

+5

Credo che questa soluzione sia ormai obsoleta su Ember.JS. Fare riferimento alla documentazione: http: // emberjs.com/guides/routing/rendering-a-template/ – dineth

56

Con il nuovo router si può fare qualcosa di simile:

{{outlet "menu"}} 
{{outlet}} 

In rotta È possibile gestire il contenuto dei punti vendita:

// application route 
Ember.Route.extend({ 
    renderTemplate: function() { 
     // Render default outlet 
     this.render(); 
     // render extra outlets 
     this.render("menu", { 
      outlet: "menu", 
      into: "application" // important when using at root level 
     }); 
    } 
}); 

Si dovrebbe avere un menu -template però.

Ulteriori informazioni a riguardo here.

+0

Qualcuno ha un link per ulteriori informazioni su questo? – doub1ejack

+1

Documentazione pertinente: http://emberjs.com/guides/routing/rendering-a-template/ – Champ

+0

Penso che questa sia l'area più utile della documentazione: http://emberjs.com/api/classes/Ember. Route.html # method_render – averydev