从帮助程序调用Router.generate

时间:2016-04-01 11:55:10

标签: ember.js

我需要从帮助程序生成给定路径的URL。

How to generate url for a route in Ember.js指出我使用generate函数。是的,它可以正常工作(通过使应用程序路由全局检查功能)。但我不知道如何从帮助者内部调用它。

1 个答案:

答案 0 :(得分:3)

你的方向很好,所以你主要解决了这个问题。 :) Ember中有两种类型的助手,一个简单的函数助手和Class Based Helpers。在这种情况下,我们将使用基于类的助手。

正如您在链接示例中看到的,我们需要访问主路由器。我们可以使用Ember.getOwner(this).lookup('router:main')执行此操作。 (Ember.getOwner() exists from v2.3,在v2.3之前使用this.container.lookup('router:main')

例如,您在router.js

中有此地图
Router.map(function() {
  this.route('about');
  this.route('posts', function() {
    this.route('post', {path: '/:post_id'});
  });
});

如果您创建一个名为url-for的帮助器,您的模板可能包含以下行:

{{url-for 'about'}}
{{url-for 'posts'}}
{{url-for 'posts.post' 2}}

您的基于班级的助手可能如下:

// app/helpers/url-for.js
import Ember from 'ember';

export default Ember.Helper.extend({
  router: Ember.computed(function() {
    return Ember.getOwner(this).lookup('router:main');
  }),

  compute([routeName, ...routeParams]) {
    let router = this.get('router');

    return Ember.isEmpty(routeParams) ?
      router.generate(routeName) : router.generate(routeName, routeParams[0]);
  }
});

<强> Demo on Ember Twiddle