Ember.js:如果控制器中满足某些条件,则在路由器中重定向
Ember.js: redirect in router if certain condition is satisfied in controller?
基本上,目标是在用户登录时呈现帐户页面,否则重定向到登录页面。
我有以下路线:
App.Router.map(function() {
this.resource('account', { path: '/'});
this.route('login', { path: '/login' });
})
我当前的代码尝试访问路由中帐户控制器中的loggedIn
属性:
App.AccountRoute = Ember.Route.extend({
renderTemplate: function(controller) {
var loggedIn = controller.get('loggedIn'); // ERROR: controller undefined
if (!loggedIn) {
this.transitionTo('login');
}
}
});
我应该在路由器中实现此逻辑吗?为什么我的路由中未定义控制器?谢谢!
这里有几个想法可能会对你有所帮助:
-
您的控制器并不总是存在。它是由 Ember 在第一次需要它时创建的。您可以使用 Chrome 扩展程序进行 Ember 调试,以查看已创建哪些控制器。在您的情况下,它应该是可用的,因为您在
renderTemplate
钩中。通常,重定向应在beforeModel
钩或redirect
钩中完成:redirect: function () { if (!this.controller.get('loggedIn')) { this.transitionTo('login'); } }
-
请考虑将身份验证逻辑移动到 Ember 服务中(示例)。Ember 中的服务只是一个扩展
Ember.Object
的类。您将能够将该服务注入到所有控制器和路由中,以便它始终可用。 -
更好的是:考虑使用处理身份验证和授权的出色 ember-simple-auth。它将创建一个可在应用中随处使用的
session
服务,因此您将能够执行以下操作:// Ensures the user is authenticated if (!this.get('session.isAuthenticated')) { this.transitionTo('login'); }
甚至更好(因为您不想到处复制粘贴这些东西):
// This route is now authenticated! App.AccountRoute = Ember.Route.extend(AuthenticatedRouteMixin, { ... }
还有许多其他很酷的东西!
另外,我看到您尚未使用Ember CLI。一旦你对Ember感觉更舒服,我会推荐它。Ember CLI 是 Ember 的未来,它的语法略有不同,但有很多很棒的东西。
相关文章:
- 通过javascript重定向html传递php变量
- JavaScript下拉菜单-点击按钮并根据所选值重定向到url
- Ember.js:如果控制器中满足某些条件,则在路由器中重定向
- 如何有条件地将引用人重定向到不同的网页
- 条件缓存页面重定向
- 如果#wrapper隐藏,则需要此脚本重定向页面的条件
- 条件Javascript重定向已中断
- 基于GeoIP的Javascript条件重定向的使用和效果
- expressjs条件重定向
- 如果 javascript 条件为 true 则重定向不起作用
- 如果这个人不符合条件,我如何使我的JavaScript提示重定向到另一个页面?
- 如果javascript中的条件为真,我想重定向到另一个页面
- 条件Javascript重定向与后退按钮检查器
- 条件满足时的Javascript重定向
- PHP条件- Javascript重定向
- 如何使JavaScript或PHP有条件重定向
- 在1秒内重定向setinterval或停止setinterval的条件
- 条件重定向URL java
- 使用 javascript 根据条件表单字段选择重定向感谢消息
- jQuery validate插件:重定向用户,如果任何特定条件无效