我需要从助手生成给定路由的 url。

How to generate url for a route in Ember.js 指出我使用 generate 函数。是的,它可以按我的需要工作(通过将应用程序路由设为全局来检查功能)。但我不确定如何从助手内部调用它。

最佳答案

你的方向很好,所以你主要解决了这个问题。 :) 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 中有此 map :

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

关于ember.js - 从助手调用 Router.generate,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36355724/

10-13 02:44