从模板访问ember js对象

时间:2014-04-07 22:33:11

标签: javascript ember.js handlebars.js

我有一个如下的余烬控制器

App.IndexController = Ember.Controller.extend({
   edwin:{
    uno:'hola',
    dos:'hola dos',
    tres:'hola tres'
  }
});

我的模板我需要属性edwin的值,如果我得到属性

  <script type="text/x-handlebars" data-template-name="index">
  {{edwin.dos}}
  </script>

工作正常, 但是当我尝试

时,我需要从其他变量中选择对象元素
 <script type="text/x-handlebars" data-template-name="index">
  {{edwin['dos']}}
  </script>

 <script type="text/x-handlebars" data-template-name="index">
  {{edwin[myvar]}}
  </script>

我无法显示该值 这是我的jsbin

http://emberjs.jsbin.com/xupuse/1/edit

任何建议

1 个答案:

答案 0 :(得分:1)

你最接近它会在控制器中根据另一个属性创建一些动态属性。真正的问题是,如果其他属性发生变化,则ember不知道如何更新它。在下面的例子中,如果edwin.xxxx改变了计算属性就不会知道*,而如果发电机改变它会知道(因为它正在观察它)。

App.IndexController = Ember.Controller.extend({
  edwin:{
    uno:'hola',
    dos:'hola dos',
    tres:'hola tres'
  },
  dynamo: 'uno',
  dynamoProperty: function(){
    return this.get('edwin.' + this.get('dynamo'));
  }.property('dynamo')
});

http://emberjs.jsbin.com/beziq/1/edit

*我有点躺在这里,你可以在edwin上指定每一个属性,它总是被标记为脏,无论它是否应用于dynamoProperty a la

  dynamoProperty: function(){
    return this.get('edwin.' + this.get('dynamo'));
  }.property('dynamo', 'edwin.{uno,dos,tres}')

http://emberjs.jsbin.com/beziq/2/edit