So che questo thread vecchio e probabilmente non aiuterà l'OP, ma StackOverflow porta a più risposte di ogni altra cosa. Ho appena scritto un blog post su questo.
Guarda questo JSBin per vedere cosa ho fatto. Riassumo qui.
percorso a passo template:
Router.map(function() {
this.resource('wizard', function(){
this.route('index');
this.route('review');
this.route('complete');
});
});
proprietà calcolato personalizzata che cambia valori quando le rotte cambiano (in questo caso, quando i gradini delle modifiche Wizard)
import Ember from 'ember';
var get = Ember.get;
var computed = Ember.computed;
export function routeVal(routeVals, prop){
return computed('currentPath', function(){
var currentRoute = get(this, 'currentPath');
var routeValues = get(this, routeVals);
for (var i = 0; i < routeValues.length; i++) {
if (routeValues[i].route === currentRoute) {
return routeValues[i][prop];
}
}
});
}
Un oggetto route-value
:
export default Ember.Object.extend({
route: null
//all other props can be added dynamically
});
Un controller mixin per essere a conoscenza del cur affitto Route:
export default Ember.Mixin.create({
needs: ['application'],
currentPath: Ember.computed.alias("controllers.application.currentPath")
});
Il regolatore delle risorse:
import CurrentRouteAware from 'path/to/mixin';
import {routeVal} from 'app_name/utils/macros';
export default Ember.Controller.extend(CurrentRouteAware, {
routeValues: [
RouteVal.create({
route: 'wizard.index',
step: 'Create',
next: 'Review',
nextTransition: 'wizard.review',
prevTransition: 'wizard.index',
showNext: true,
showPrev: false
}),
RouteVal.create({
route: 'wizard.review',
step: 'Review',
next: 'Complete',
prev: 'Create',
nextTransition: 'wizard.complete',
prevTransition: 'wizard.index',
showNext: true,
showPrev: true
}),
RouteVal.create({
route: 'wizard.complete',
step: 'Complete',
next: 'Make Another',
prev: 'Review',
nextTransition: 'wizard.complete',
prevTransition: 'wizard.review',
showNext: false,
showPrev: true
})
],
nextButton: routeVal('routeValues', 'next'),
prevButton: routeVal('routeValues', 'prev'),
nextTransition: routeVal('routeValues', 'nextTransition'),
showButtons: routeVal('routeValues', 'showButtons'),
prevTransition: routeVal('routeValues', 'prevTransition'),
showNext: routeVal('routeValues', 'showNext'),
showPrev: routeVal('routeValues', 'showPrev'),
actions: {
next: function(){
this.transitionToRoute(this.get('nextTransition'));
},
prev: function(){
this.transitionToRoute(this.get('prevTransition'));
}
}
});
Pensate dell'oggetto valore di percorso nel senso, "Quando il percorso è uguale a routeVal.route, le seguenti proprietà avranno questi valori" per esempio "Quando il percorso attualmente attivo è 'wizard.index' la prossima transizione è 'wizard.review', il testo del pulsante successivo è 'Review', il pulsante precedente deve essere nascosto, ecc. "
E infine il modello di risorsa:
<div class="wizard" id="wizardIllustration">
{{form-wizard steps=routeValues currentPath=currentPath}}
<div class="actions">
{{#if showPrev}}
<button type="button" {{action 'prev'}}class="btn btn-default btn-prev"><span class="glyphicon glyphicon-arrow-left"></span>{{prevButton}}</button>
{{/if}}
{{#if showNext}}
<button {{action 'next'}}type="button" class="btn btn-default btn-next" >{{nextButton}}<span class="glyphicon glyphicon-arrow-right"></span></button>
{{/if}}
</div>
<div class="step-content">
{{outlet}}
</div>
</div>
Si può guardare a jsbin per quale sia il componente form-wizard (solo un involucro attorno al css per i wizard di Fuelux che mantiene la classe attiva sul passo corretto in base alla rotta). Il corpo della procedura guidata è il modello per ciascuno dei subroutes. Il testo del pulsante next/prev cambia a seconda del percorso, così come le loro transizioni (poiché la transizione dipende dallo stato corrente della procedura guidata). È più o meno un FSM
Sembra che tu abbia già qualche idea. Perché non provare a implementarli prima? Credo che le persone siano più propense ad aiutarti quando hai dimostrato uno sforzo per risolvere il tuo problema. – DaMainBoss
http://stackoverflow.com/questions/14701856/ember-js-wizard-control <= Questo potrebbe essere d'aiuto;) Puoi avviare qualcosa in JSBin. – DaMainBoss
@DaMainBoss in realtà ho provato per un paio d'ore e continuo a provare anche in questo momento. Iniziato con 'connectOutlet' dal controller e ha detto che i controller non hanno il metodo' connectOutlet', quindi lo hanno spostato alla vista, quindi provato con route. A un certo punto, tutti gli intenti sono falliti, ecco perché sto chiedendo delle linee guida sull'architettura e non esempi di codice reali, perché sento che sto pugnalando al buio. Inoltre, ho già visto quella domanda collegata, ma non è correlata alla mia domanda come sembra all'inizio. –