应用程序模板中的动态值

时间:2014-01-14 07:43:21

标签: ember.js

我尝试在登录后实现用户名显示。它显示在顶层菜单中。但是登录前会显示顶层菜单,因此用户名将被缓存。

我尝试了很多方法,并且使用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}}帮助从另一个控制器显示值,值仍然被缓存。

2 个答案:

答案 0 :(得分:0)

似乎我只需要从其他控制器更新ApplicationController上的值,并以正确的方式执行它。像这样:

App.LoginController = Ember.Controller.extend({
  needs: 'application',
  setTime: function() {
    this.get('controllers.application').set('currentTime', new Date());
  }
});

申请说明:http://jsbin.com/OPUSoTaF/4/edit

答案 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