【问题标题】:Call Router.generate from a helper从助手调用 Router.generate
【发布时间】:2016-04-01 11:55:09
【问题描述】:

我需要从帮助程序生成给定路由的 url。

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

【问题讨论】:

    标签: ember.js


    【解决方案1】:

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

    【讨论】:

    • container.lookup 完成了这项工作。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2011-06-29
    • 2016-09-02
    • 1970-01-01
    • 1970-01-01
    • 2010-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多