如何在Ember.js中为路由生成url

时间:2014-02-02 16:34:51

标签: javascript ember.js url-routing

我想知道如何为给定路线生成网址。

我的场景

我有呼叫列表(db实体),用户可以选择多个呼叫并通过电子邮件与其他人共享。

创建所选调用的子域后,带有散列和关系的db行包含所选调用。现在我需要生成可以通过电子邮件发送的链接。此链接与呼叫路由列表的路由不同。

所以问题是:是否可以通过Ember.js中的route和params生成url?谢谢。

2 个答案:

答案 0 :(得分:24)

您可以使用代理Router#generaterouter.js library

Ember 2.5 Example

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 Example

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 ...}}助手在幕后使用的内容。

答案 1 :(得分:0)

这可以在带有RouterService的任何Ember.js类中完成。自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));
    }
  }
});