我正在尝试使用ember编写登录/注销小部件。我想切换isLoggedIn属性,以便当用户注销时将其设置为False,并在用户登录时设置为True.isLoggedIn在我的应用程序控制器中定义,并在我的应用程序模板中使用把手调用。现在,我需要在用户成功登录并在LoginController内激活Login函数时将isLoggedIn的值设置为true - 并在用户单击logout时注销。所以我的问题是:我怎么能有LoginController&应用程序控制器相互访问并更改其中的变量。
以下是应用程序模板中的一些代码:
<section class="top-bar-section">
<!-- Right Nav Section -->
<ul class="right">
...
{{#if isLoggedIn}}
<li><a href="#" {{ action "logout" }}>Logout</a></li>
{{else}}
<li>
{{#linkTo "login"}}Login{{/linkTo}} </li>
{{/if}}
</ul>
</section>
</nav>
{{outlet}}
应用程序控制器:
var App;
App = require('app');
module.exports = App.ApplicationController = Ember.ObjectController.extend({
isLoggedIn: false,
logout: function(){
this.set("isLoggedIn", false);
console.log(this.token);
}
});
登录模板:
...
<form class="form-horizontal" {{action "login" on="submit"}}>
...
<div class="row">
<div class="large-5 columns">
<label>Username</label>
{{input value=username type="text" placeholder="Username"}}
</div>
<div class="large-5 columns">
<label>Password</label>
{{input value=password type="password" placeholder="Password"}}
</div>
<div class="large-2 columns">
</br>
{{input class="small button" type="submit" value="Log In"}}
</div>
</div>
</form>
{{#if errorMessage}}
<div class="large-12 columns alert-box alert">{{errorMessage}}</div>
{{/if}}
{{/if}}
的LoginController:
var App;
App = require('app');
module.exports = App.LoginController = Ember.ObjectController.extend({
//some variables...
//other functions...
login: function() {
// set isLoggedIn to true here
...}
});
最初导航栏会看到isLoggedIn为false,因此显示Login。成功登录并单击“提交”后,将触发一个操作并激活LoginController内的login()。这就是我想将isLoggedIn设置为true的地方,以便Logout将出现在导航栏上。
答案 0 :(得分:4)
你试过了吗?
module.exports = App.LoginController = Ember.ObjectController.extend({
needs: ['application']
login: function() {
if (authentification sucess) {
this.set('controllers.application.isLoggedIn', true);
} else {
this.set('controllers.application.isLoggedIn', false);
}
}
});
要访问其他控制器实例,请使用needs
属性。每个指定的控制器都将注入controllers
属性。所以needs: ['application']
将应用程序控制器注入controllers.applicaiton
。