Как создать URL-адрес маршрута в Ember.js

Мне интересно, как можно генерировать URL для данного маршрута.

Мой сценарий

У меня есть список вызовов (объект db), и пользователь может выбрать несколько вызовов и поделиться ими с другими людьми по электронной почте.

После подачи выбранных вызовов создается строка db с хешем и по соотношению содержит выбранные вызовы. Теперь мне нужно создать ссылку, которая может быть отправлена ​​по электронной почте. Эта ссылка не совпадает с маршрутом маршрута.

Итак, вопрос: Возможно ли генерировать URL по маршруту и ​​параметрам в Ember.js? Спасибо.

Ответ 1

Вы можете использовать Router#generate, который делегирует маршрутизатору .js.

Пример Ember 2.5

App = Ember.Application.create();

App.Router.map(function() {
  this.resource('post', { path: '/posts/:post_id' }, function(){
    this.route('edit');
  });
});

App.Post = Ember.Object.extend();

App.IndexRoute = Ember.Route.extend({
  model: function() {
    return [
      App.Post.create({
        id: 5,
        title: 'I am post 5'
      }),
      App.Post.create({
        id: 6,
        title: 'I am post 6'
      }),
      App.Post.create({
        id: 7,
        title: 'I am post 7'
      })];
  },
  actions: {
    showUrl: function(post) {
      alert(this.router.generate('post.edit', post));
    }
  }
});

Пример Ember 1.3

App = Ember.Application.create();

App.Router.map(function() {
  this.resource('post', { path: '/posts/:post_id' }, function(){
    this.route('edit');
  });
});

App.Post = Ember.Object.extend();

App.IndexRoute = Ember.Route.extend({
  model: function() {
    return [
      App.Post.create({
        id: 5,
        title: 'I am post 5'
      }),
      App.Post.create({
        id: 6,
        title: 'I am post 6'
      }),
      App.Post.create({
        id: 7,
        title: 'I am post 7'
      })];
  },
  actions: {
    showUrl: function(post) {
      alert(this.router.generate('post.edit', post));
    }
  }
});

Это то, что использует помощник {{#link-to ...}} под капотом.

Ответ 2

Это можно сделать в любом классе Ember.js с помощью RouterService. Он доступен с Ember.js 2.15 и в 3.x. Функции маршрутизации больше не ограничены Route.

Ember 2.15, 3.x Пример

import Component from '@ember/component';
import { inject as service } from '@ember/service';

export default Component.extend({
  router: service(),

  actions: {
    showUrl(post) {
      alert(this.get('router').urlFor('post.edit', post));
    }
  }
});