Является ли ресурс единственным вложением нескольких динамических сегментов?
Кажется, это говорит о том, что ответ "да":
От Ember Pre1 до Pre4: несколько динамических сегментов по маршруту? Обновление: что такое разрешенный синтаксис для динамических сегментов?
... но я просто хочу подтвердить.
В моем случае, в качестве учебного упражнения, я создаю календарь в Ember с ежемесячными экранами. Мне нужно уметь ссылаться с данного месяца на предыдущий месяц и на следующий месяц.
Поэтому я хотел бы иметь возможность
{{ linkTo calendar_month year month }}
и
this.transitionTo('calendarMonth', year, month)
Удивление, если это возможно, без использования вложенных ресурсов. Я могу заставить его работать с чем-то вроде:
App.Router.map(function() {
this.resource("year", { path: "calendar/:year" }, function() {
this.resource("calendar_month", { path: "/:month" }, function() {
this.route('index');
});
});
});
... но это связано с введением объекта Year, который, возможно, не обязательно должен существовать с точки зрения моделирования, поэтому я могу использовать его id в linkTo
Я бы предпочел настроить маршрут с двумя параметрами/динамическими сегментами:
App.Router.map(function() {
this.route('calendar_month', { path: 'calendar/:year/:month'});
});
Но я исправлю, что это невозможно? Я просто хочу убедиться, что я делаю это самым чистым, самым искушенным способом.
Поставьте другой способ:
Я понимаю это понятие: "Если ваш пользовательский интерфейс вложен, ваши маршруты должны быть вложенными", но, если мой url вложен, это не обязательно означает, что мой интерфейс также будет вложен. Поэтому мне интересно: если мой url вложен, всегда ли лучше создавать соответствующие вложенные модели?
Любые рекомендации/разъяснения очень ценятся.
спасибо,
Ответы
Ответ 1
Как я задавал вопрос, на который вы ссылались, я отвечаю здесь. Я уже обновил свой вопрос, что это вполне возможно.
Ваш подход должен работать:
App.Router.map(function() {
this.route('calendar_month', { path: 'calendar/:year/:month'});
});
Все, что вам нужно добавить, это реализация сериализации и реализаций схемы:
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;
}
Это также потребует модификации вашего использования linkTo:
{{ linkTo calendar_month year month }}
... вместо этого вы просто используете:
{{ linkTo calendar_month yearAndMonth }}
Я думаю, что это ярый способ справиться с этим.
Резюме: Итак, что такое маршруты?
Они используются для разделения проблем. И в вашем случае кажется, что год и месяц относятся к одной и той же проблеме (= маршрут). Поэтому они должны быть объединены в новый объект Ember, и ваш маршрут (CalendarMonthRoute) должен иметь дело с этим новым объектом (возможно, YearAndMonthObject или CalendarMonthObject?).