【问题标题】:Ember active linkEmber 活动链接
【发布时间】:2017-09-27 21:04:56
【问题描述】:

我有一条路线,我想让同级路线的链接也处于活动状态。我曾尝试在链接中使用 current-when,但它对我不起作用。

我的路线如下

//projects
//projects/:project_id
//projects/:project_id/user/:user_id

当我导航到 //projects/:project_id 路线时,正确的链接设置为活动。我希望在 //projects/:project_id/users/:user_id 路由上激活相同的链接。

我在父 //projects hbs 模板中的链接是

{{#link-to "projects.project" item.projectID current-when="projects.user" tagName="tr"}}

我在这里做错了什么?

更新

通过使用@ykaragol 的辅助函数的编辑版本和链接到...

{{#link-to "projects.project" item.projectName active=(calculate-active 'projects.user projects.project' item.projectName) tagName="tr"}}


compute(params, hash){
var pathname = window.location.pathname.split('/');
var pathProj = pathname[2];
var currRoute = this.get('currentRouteName');
var routes = params[0].split(' ');
if( ($.inArray( currRoute, routes) > -1) && (pathProj == params[1]) ){
  return true;
}
return false;
}

但是当我点击不同的项目时它没有更新......

【问题讨论】:

    标签: ember.js


    【解决方案1】:

    如果路由没有动态段,它会按照docs 中的说明工作。我已经在this twiddle 内测试过了。

    但是在使用动态细分时我无法让它工作。请查看this twiddle。我怀疑这可能是一个错误。你可以在slack问这个问题。

    顺便说一句,作为一种解决方法,您可以将布尔值传递给currentWhen 属性(如docs 中所述)。因此,您可以编写帮助程序或计算属性来使用正则表达式进行计算。

    更新:

    作为第二种解决方法,您可以自己处理link-toactive 属性。试试this twiddle

    【讨论】:

    • 这是解决方法的一个好主意,但有一个现有错误不允许我在当前github.com/emberjs/ember.js/issues/12296 中使用布尔值
    • 我也尝试过在 //projects/:project_id/user/:user_id 路由上使用 didTransition 动作钩子来手动(通过 jquery)将活动类添加到 div,但它不是也不行。
    • 所以这让我更接近了,但是所有项目链接在用户页面上都设置为活动状态。鉴于我在 URL 中有两个动态部分,您能否更新 Twiddle 以显示我将如何合并它?
    • helper中,observer当前监听currentRouteName,切换到routing.currentState
    • 您可以使用-routing 服务,而不是从地址栏解析它。类似this.get('routing.currentState.routerJsState.params.projects.project_id')
    猜你喜欢
    • 2013-01-24
    • 2018-01-21
    • 1970-01-01
    • 2011-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多