【发布时间】:2014-04-05 09:41:55
【问题描述】:
我创建了一个小的jsfiddle,它不能使用 ember 1.5 和 handlebars 1.3 执行登录权限。登录控制器拥有一个设置为 true 的属性“isLogin”。但是为什么之后没有其他路由和模板注意到这个变化呢?
<script type="text/x-handlebars">
{{#if controllers.login.isLogin}}
<div class="container">
<div class="navbar">
<div class="navbar-inner">
<a class="brand" href="#">Ember Digest</a>
<ul class="nav pull-right">
<li>{{#link-to 'articles'}}Articles{{/link-to}}</li>
<li>{{#link-to 'photos'}}Photos{{/link-to}}</li>
<li>{{#link-to 'login'}}Login{{/link-to}}</li>
</ul>
</div>
</div>
{{outlet}}
</div>
{{/if}}
{{render 'login' controllers.login.content}}
</script>
<script type="text/x-handlebars" data-template-name="articles">
<h2>Articles</h2>
</script>
<script type="text/x-handlebars" data-template-name="login">
{{#if isLogin}}
<p>You are already logged in!</p>
{{else}}
<form class="form-inline" {{action login on="submit"}}>
<h2>Log In</h2>
{{input class="btn" type="submit" value="Log In"}}
</form>
{{#if errorMessage}}
<div class="alert alert-error">{{errorMessage}}</div>
{{/if}}
{{/if}}
</script>
和js
App = Ember.Application.create();
// Routes
App.Router.map(function () {
this.route('articles');
this.route('photos');
this.route('login');
});
App.LoginRoute = Ember.Route.extend({
renderTemplate: function () {
this.render('login', {
into: 'application',
outlet: 'login'
});
}
});
App.AuthenticatedRoute = Ember.Route.extend({
beforeModel: function (transition) {
if (!this.controllerFor('login').get('isLogin')) {
this.redirectToLogin(transition);
}
},
redirectToLogin: function (transition) {
alert('You must log in!');
var loginController = this.controllerFor('login');
loginController.set('errorMessage', 'Login first');
this.transitionTo('login');
}
});
App.ApplicationRoute = Ember.Route.extend({
beforeModel: function (transition) {
if (!this.controllerFor('login').get('isLogin')) {
this.transitionTo('login');
}
}
});
App.LoginController = Ember.Controller.extend({
isLogin: false,
errorMessage: '',
actions: {
login: function () {
alert("login");
this.set('isLogin', true);
this.transitionToRoute('articles');
}
}
});
App.ArticlesRoute = App.AuthenticatedRoute.extend({
needs: 'login'
});
App.ApplicationController = Ember.Controller.extend({
needs : 'login'
});
【问题讨论】:
标签: javascript ember.js login-control