我尝试在登录后实现用户名显示。它显示在顶层菜单中。但是登录前会显示顶层菜单,因此用户名将被缓存。
我尝试了很多方法,并且使用volatile()似乎是最好的选择,但它不起作用。在这个简单的例子中,currentTime只计算一次:
<script type="text/x-handlebars" data-template-name="application">
{{currentTime}}
</script>
App.ApplicationController = Ember.Controller.extend({
currentTime: function() {
console.log('computing value');
var time = new Date();
return time;
}.property().volatile()
});
Ember版本1.3
P.S。我准备了要点来说明这个问题:http://jsbin.com/OPUSoTaF/1
实际上,我找不到在Ember的应用程序模板中显示动态值的方法。尝试使用{{render}}
帮助从另一个控制器显示值,值仍然被缓存。
答案 0 :(得分:0)
似乎我只需要从其他控制器更新ApplicationController上的值,并以正确的方式执行它。像这样:
App.LoginController = Ember.Controller.extend({
needs: 'application',
setTime: function() {
this.get('controllers.application').set('currentTime', new Date());
}
});
答案 1 :(得分:0)
您可以使用Handlebars {{action 'actionName'}}
帮助程序更改ember属性,从而更改视图。您可以将动作帮助器添加到手柄模板中的几乎任何UI元素,通常在单击时触发。触发后,它会在控制器上调用actionName
方法。
示例:强>
把手模板:
<script type="text/x-handlebars" data-template-name="application">
<button {{action 'login'}}>Login</button>
{{loginTime}}
</script>
控制器:
App.ApplicationController = Ember.Controller.extend({
loginTime: 'User not logged in yet',
actions: {
login: function() {
// ... Do some login stuff ...
this.set('loginTime', new Date());
}
}
});
工作jsbin示例在这里:http://jsbin.com/udUyOXaL/1/edit