with transitiontoroute rsvp route emberjs ember ember.js ember-router

ember.js - transitiontoroute - outlet ember



¿La anidación de recursos es la única forma de habilitar múltiples segmentos dinámicos? (1)

Esto parece sugerir que la respuesta es sí:

De Ember Pre1 a Pre4: ¿Múltiples segmentos dinámicos por ruta? Actualización: ¿Cuál es la sintaxis permitida para los segmentos dinámicos?

... pero solo quiero confirmarlo

En mi caso, como un ejercicio de aprendizaje, estoy construyendo un calendario en Ember, con pantallas mensuales. Necesito poder vincular desde un mes determinado al mes anterior y al mes siguiente.

Entonces me gustaría poder

{{ linkTo calendar_month year month }}

y

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

Preguntándose si esto es factible sin usar recursos anidados. Puedo hacer que funcione con algo como:

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

... pero esto implica la introducción de un objeto Year que podría no necesitar existir desde una perspectiva de modelado, solo para poder usar su id en linkTo

Prefiero configurar una ruta con dos parámetros / segmentos dinámicos:

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

¿Pero estoy en lo correcto de que esto no es posible? Solo quiero asegurarme de estar haciendo esto de la manera más limpia y más fea posible.

Dicho de otra manera:

Entiendo esta noción de que "si su interfaz de usuario está anidada, sus rutas deben estar anidadas", pero, si mi URL está anidada, esto no implica necesariamente que mi interfaz también estará anidada. Así que me pregunto: si mi URL está anidada, ¿siempre es una buena práctica construir modelos anidados correspondientes?

Cualquier orientación / aclaración muy apreciada.

Gracias,


Como soy el autor de la pregunta a la que hace referencia, respondo aquí. Ya he actualizado mi pregunta de que esto es perfectamente posible.

Tu enfoque debería funcionar:

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

Todo lo que tiene que agregar son las implementaciones de serialización y gancho de modelo:

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; }

Esto también necesitaría una modificación en su uso de linkTo:

{{ linkTo calendar_month year month }}

... en su lugar, solo usarías:

{{ linkTo calendar_month yearAndMonth }}

Creo que esta es una manera asquerosa de lidiar con esto.

Resumen: ¿De qué se tratan las rutas?

Se usan para separar preocupaciones . Y en su caso, parece que ese año y mes son parte de la misma preocupación (= ruta) . Por lo tanto, deberían estar envueltos en un nuevo objeto Ember y su ruta (CalendarMonthRoute) debería tratar con este nuevo objeto (¿quizás YearAndMonthObject o CalendarMonthObject?).