Как генерировать ссылки как это делает LinkComponent

Вопрос: как можно сгенерировать ссылку, соответствующую какому-то роуту, за пределами hbs-шаблона.

Ответ: генерация внутренних ссылок в Ember осуществляется через роутер (метод generate). Как можно получить к нему доступ и откуда? Понадобится он нам может из контроллера и из компонента. По умолчанию для контроллера свойство target и есть роутер. А вот для компонента вначале надо взять targetObject, который является контроллером (если не изменено умышленно), а у него уже взять target. Ссылки на «динамические» роуты получаются тоже с использованием метода generate. Передается лишь дополительный параметр, соответсвующий id.

Демка доступна на ember-twiddle (ссылка). Дан роутер вида:

Router.map(function() {
  this.route('foo', {path: '/foo'}, function () {
    this.route('bar', {path: '/bar/:bar_id'}, function () {
      this.route('baz', {path: '/baz'});
    });
  });
});

Из контроллера и компонента ссылки на foo/bar/123/baz генерируются так:

// controller
this.get('target').generate('foo.bar.baz', 123); 
// "foo/bar/123/baz"
 
// component
this.get('targetObject.target').generate('foo.bar.baz', 123); 
// "foo/bar/123/baz"

Если еще надо в ссылку добавить параметры, то делаем так:

target.generate('foo.bar.baz', 123, {queryParams: {a: 2, b: 3}}); 
// "foo/bar/123/baz?a=2&b=3"

, ,

Оставить комментарий

Top ↑ | Main page | Back