gpt4 book ai didi

javascript - 在 Promise 中设置属性后,Ember Controller 不刷新模板

转载 作者:行者123 更新时间:2023-11-28 08:29:49 24 4
gpt4 key购买 nike

我可能做错了,但是这里是这样的:我从服务器获取用户,一旦解决,我将尝试将用户的名称呈现到页面。登录表单实际上是一个基于此的弹出窗口:http://www.sociallipstick.com/?p=86

不幸的是,当我将 userLoggedIn 设置为 true 时,模板根本没有改变。我做错了什么吗?

App.UserController = Ember.Controller.extend({
userLoggedIn: false,
actions: {
displayLoginForm: function () {
//displays a login form
},
recieveLogin: function (authResult) {
//hides login form
var userPromise = this.store.find('user', authResult); // successfully gets user from server (as far as I can tell)
var self = this;
userPromise.then(function (user) {
self.set('model', user);
self.set('userLoggedIn', true);
});
}
}
});
<li class="navbar-form">
{{#if userLoggedIn}}
<a href="#" class="dropdown-toggle" data-toggle="dropdown"><b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a href="#">My quizzes</a></li>
<li><a href="#">My scores</a></li>
<li><a href="#">Settings</a></li>
<li class="divider"></li>
<li><a href="#">Logout</a></li>
</ul>
{{else}}
<button class="btn btn-default" {{action 'displayLoginForm'}}>Login</button>
{{/if}}
</li>

最佳答案

这个错误实际上是由与我想象的完全不同的问题引起的。登录脚本的回调使用 [hacky] 行从 Ember 外部的弹出窗口获取 Controller :

window.opener.App.__container__.lookup('controller:User').send('recieveLogin', 'USERIDHERE');

不幸的是,这实际上得到了一个不同的 Controller 实例,它什么也没做......

所以,我像这样修改了 Controller :

App.UserController = Ember.Controller.extend({
userLoggedIn: false,
actions: {
displayLoginForm: function () {
//displays a login form
/******** THIS IS THE IMPORTANT LINE ********/
App.UserController.callback = this;
/******** THAT WAS THE IMPORTANT LINE ********/
},
recieveLogin: function (authResult) {
//hides login form
var userPromise = this.store.find('user', authResult); // successfully gets user from server (as far as I can tell)
var self = this;
userPromise.then(function (user) {
self.set('model', user);
self.set('userLoggedIn', true);
});
}
}
});

然后我在页面上使用了稍微不那么老套的行:

window.opener.App.UserController.callback.send('recieveLogin', 'USERIDHERE');

关于javascript - 在 Promise 中设置属性后,Ember Controller 不刷新模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22001632/

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