Подтвердить что ты не робот

Является ли ресурс единственным вложением нескольких динамических сегментов?

Кажется, это говорит о том, что ответ "да":

От 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 вложен, всегда ли лучше создавать соответствующие вложенные модели?

Любые рекомендации/разъяснения очень ценятся.

спасибо,

4b9b3361

Ответ 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?).