2013-03-01 4 views
13

Dies scheint darauf hinzudeuten, dass die Antwort ja:Ist die Ressourcenverschachtelung die einzige Möglichkeit, mehrere dynamische Segmente zu aktivieren?

From Ember Pre1 to Pre4: Multiple dynamic segments per route? Update: What is the allowed syntax for dynamic segments?

... aber ich möchte nur bestätigen.

In meinem Fall, als Lernübung, baue ich einen Kalender in Ember, mit monatlichen Anzeigen. Ich muss in der Lage sein, von einem gegebenen Monat zum vorherigen Monat und zum nächsten Monat zu verbinden.

So würde Ich mag können

{{ linkTo calendar_month year month }} 

und

this.transitionTo('calendarMonth', year, month) 

fragen sich, ob dies machbar ohne verschachtelte Ressourcen.

App.Router.map(function() { 
    this.resource("year", { path: "calendar/:year" }, function() { 
    this.resource("calendar_month", { path: "/:month" }, function() { 
     this.route('index'); 
    }); 
    }); 
}); 

... aber dies beinhaltet ein Jahr Ziel einzuführen, die aus einer Modellierung Perspektive ist vielleicht nicht wirklich brauchen, existieren, nur so kann ich seine ID in linkto

verwenden: Ich kann es mit so etwas wie bekommen arbeitet

ich würde es vorziehen, eine Route mit zwei Parametern/dynamischen Segmenten einzurichten:

App.Router.map(function() { 
    this.route('calendar_month', { path: 'calendar/:year/:month'}); 
}); 

Aber bin ich richtig, dass dies nicht möglich ist? Ich möchte nur sicherstellen, dass ich das auf die sauberste, schärfste Art und Weise mache.

Anders ausgedrückt:

ich diesen Begriff zu verstehen, dass „Wenn Ihre Benutzeroberfläche verschachtelt ist, dann Routen verschachtelt werden sollten“, aber, wenn meine URL verschachtelt ist, bedeutet dies nicht zwangsläufig bedeuten, dass meine Schnittstelle wird auch verschachtelt sein. Ich frage mich also: Wenn meine URL verschachtelt ist, ist es immer am besten, entsprechende verschachtelte Modelle zu erstellen?

Jede Anleitung/Klärung sehr geschätzt.

Dank,

Antwort

17

wie ich bin die Fragesteller von der Frage, die Sie verweisen, ich bin hier zu beantworten. Ich habe meine Frage bereits aktualisiert, dass dies durchaus möglich ist.

sollte Ihr Ansatz arbeiten:

App.Router.map(function() { 
    this.route('calendar_month', { path: 'calendar/:year/:month'}); 
}); 

Alles, was Sie hinzufügen müssen, sind die serialize und Modell Haken Implementierungen:

serialize: function(context){ 
    // i assume that you wrap year and month in an Object (maybe App.YearAndMonthObject) 
    var ret = { 
     year : context.get("year"), 
     month : context.get("month") 
    }; 
    return ret; 
}, 
model : function(params){ 
    //somehow create your object from the params 
    var model = App.YearAndMonthObject.create({ 
     year : params.year, 
     month : params.month 
    }); 
    return model; 
} 

Dies müsste auch eine Änderung auf die Nutzung von linkto:

{{ linkTo calendar_month year month }} 

... stattdessen würden Sie einfach verwenden:

{{ linkTo calendar_month yearAndMonth }} 

Ich denke, das ist ein emberish Weg, damit umzugehen.

Zusammenfassung: Also worum geht es bei den Routen?

Sie sind verwendet Bedenken trennen. Und in Ihrem Fall scheint es so, dass Jahr und Monat Teil des gleichen Anliegens sind (= Route). Daher sollten sie in einem neuen Ember-Objekt zusammengefasst werden und Ihre Route (CalendarMonthRoute) sollte sich mit diesem neuen Objekt beschäftigen (vielleicht YearAndMonthObject oder CalendarMonthObject?).

+1

vielen Dank. sehr hilfreich – doublea

+1

Sie sind willkommen – mavilein

+0

Würden die 'serialize()' und 'model()' Methoden in 'calendar_month.js' in diesem Beispiel leben? – sova

Verwandte Themen