这是Ember问题之一,我无法复制anywhere,但我的项目。该问题的视觉效果是active
上的link-to
类是落后的一个过渡。我将点击一个链接,并使用active
类突出显示我刚刚访问的页面的链接。
我已经开始深入研究link-to
组件code,以确定如何计算active
。但它基于_routing.currentState
,我不确定那是什么。 currentState
和其他信息将传递给routing
的{{3}},然后调用routerState
的{{3}}。 isActiveForRoute调用另一个isActiveIntent
并将更多内容进行比较。所有这些看起来像一个大型的复活节彩蛋寻找某些东西(我的问题的根源),这可能不是在Ember的代码中。
我觉得以下片段总结了我遇到的问题。 targetRouteName
是链接指向的路由。 _routing.currentRouteName
似乎指向浏览器当前正在查看的路由。这些匹配的事实让我觉得链接应该是active
,但active
函数会返回false
。
> link.get('targetRouteName')
"parentRoute.pageA.index”
> link.get('_routing.currentRouteName')
"parentRoute.pageA.index”
> link.get('active')
false
作为参考,这是在通过Chrome扩展程序找到链接并显示所有组件之后。然后我做了
link = $E
。
对于错误的链接(获得active
类的链接),我得到:
> link.get('targetRouteName')
"parentRoute.pageB.index"
> link.get('_routing.currentRouteName')
"parentRoute.pageA.index"
> link.get('active')
"active"
我正在处理的路线是嵌套的。但这是一个非常标准的嵌套,非常类似于我isActiveIntent中的嵌套(例如page-a
,page-b
,page-c
)。
父路线和子路线的索引上有一个模型钩子。但是孩子们将父母的路线引用(this.modelFor(...)
)。
我的模板引用了这些路线的.index
。它们是标准的link-to
组件。它们不包括模型信息。
我正在运行Ember-cli 1.13.8,Ember 2.0.0和Ember Data 2.0.0-beta.1。
.index
ember init
以查看我的路由器或应用程序设置是否与标准布局不同,并且它没有任何重大差异。我已经有这个问题已经有几个星期了,而且我不知道还能在哪里看。我很想知道如何解决这个问题。
最终在2.1.0中得到修复。
答案 0 :(得分:1)
当您使用willTransition路由器操作时,这是常见问题。例如,
IMS.ResultDetailsEditRoute = Ember.Route.extend({
actions: {
willTransition: function() {
this.controller.clearForm();
}
}
});
在这段代码中,剪切了willTransition,称为控制器" clearForm()"不再存在。出于某种原因,Ember不会抛出错误,但它会导致@RyanJM解释的问题。
答案 1 :(得分:0)
使用带导航的组件时遇到了类似的问题。这是我的方法:
我添加了一个控制器(我知道,你应该转向这些,但我需要)。我的控制器:
import Ember from 'ember';
const {
Controller,
inject
} = Ember;
export default Controller.extend({
application: inject.controller(),
});
然后,在我的模板中,我可以将应用程序传递给我的组件。
{{account/account-icon-nav currentRouteName=application.currentRouteName}}
在我的组件中,我设置了一个函数来测试我当前的路由名称:
import Ember from 'ember';
const {
Component,
computed,
get
} = Ember;
const activeParentRoute = function(dependentKey, parentRouteName) {
return computed(dependentKey, {
get() {
return get(this, dependentKey).indexOf(parentRouteName) > -1;
}
});
};
export default Component.extend({
isYourProfile: activeParentRoute('currentRouteName', 'account.your-profile'),
isYourActivity: activeParentRoute('currentRouteName', 'account.your-activity'),
isYourGoals: activeParentRoute('currentRouteName', 'account.your-goals')
});
然后自己绑定活动类:
<div class="icon-nav md-hidden">
{{link-to "" "account.your-profile" classBinding=":profile isYourProfile:active" title="Your Life"}}
{{link-to "" "account.your-activity" classBinding=":activity isYourActivity:active" title="Your Money"}}
{{link-to "" "account.your-goals" classBinding=":goals isYourGoals:active" title="Your Goals"}}
</div>
我知道这有点不同,因为我们在一个组件中这样做,但我希望它有所帮助。您可以通过传递应用程序来自己绑定这些类。