gpt4 book ai didi

Ember.js 在 Controller 之间访问和更改变量

转载 作者:行者123 更新时间:2023-12-02 05:45:00 24 4
gpt4 key购买 nike

我正在尝试使用 ember 编写登录/注销小部件。我想切换 isLoggedIn 属性,以便在用户注销时将其设置为 False,在用户登录时将其设置为 True。isLoggedIn 在我的应用程序 Controller 中定义,并在我的应用程序模板中使用 Handlebars 调用。现在,我需要在用户成功登录时将 isLoggedIn 的值设置为 true 并且在 LoginController 内部激活登录功能 - 并在用户单击注销时注销。所以我的问题是:如何让 LoginController 和应用程序 Controller 相互访问并更改其中的变量。

这是应用程序模板中的一些代码:

    <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}}

应用程序 Controller :

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}}

登录 Controller :

var App;

App = require('app');

module.exports = App.LoginController = Ember.ObjectController.extend({
//some variables...

//other functions...

login: function() {
// set isLoggedIn to true here
...}

});

最初导航栏会看到 isLoggedIn 为假,因此显示登录。成功登录并单击提交后,将触发一个操作并激活 LoginController 内的 login()。这就是我想将 isLoggedIn 设置为 true 的地方,这样注销将出现在导航栏上。

最佳答案

你试过吗:

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);
}
}
});

要访问其他 Controller 实例,您可以使用 needs 属性。每个指定的 Controller 都将被注入(inject)到 controllers 属性中。所以需要:['application'],在controllers.applicaiton中注入(inject)应用 Controller 。

关于Ember.js 在 Controller 之间访问和更改变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18385862/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com