不再能够绑定到Ember的全局数据结构?

时间:2014-12-16 21:56:08

标签: ember.js ember-data handlebars.js

我一直在我的代码中使用一些Ember对象,例如“App.SelectedBlock”来访问列表中的选定项目(这是我多年前使用Sproutcore时开始的一种做法)现在它看起来像绑定到这些对象来自Handlebars模板将被弃用,我不知道如何解决这个问题。我正在运行Ember 1.8.1,现在它仍然有效,但我会得到“DEPRECATION:不推荐使用Handlebars模板中的App.SelectedBlock全局查找。”而且我很确定它在1.9.0中完全删除了。我不知道如何解决这个问题而不必完全重构我的代码。有什么建议吗?

2 个答案:

答案 0 :(得分:4)

我猜你做得像:

{{App.SelectedBlock.id}}

您不应在Handlebars模板中调用全局变量。这是一种不好的做法。但你可以这样做:

// in your template controller
selectedBlock: function(){
  return Ember.get('App.SelectedBlock');
}.property('App.SelectedBlock')

在hbs模板中:

{{selectedBlock.id}}

答案 1 :(得分:1)

您可以在控制器上创建一个属性,然后使用 而不是全局查找App.SelectedBlock

App = Ember.Application.create();

App.ApplicationController = Ember.ObjectController.extend({
  programmers: function(){
    return App.SelectedBlock.get('programmers');
  }.property()
});

App.SelectedBlock = Ember.Object.create({
 programmers: [
   {firstName: "Yehuda", id: 1},
   {firstName: "Tom",    id: 2}
 ]
});

然后,在您的模板中,您可以执行以下操作:

 <script type="text/x-handlebars">
   <h2>Welcome to Ember.js</h2>

   {{view "select"
     content=programmers
     optionValuePath="content.id"
     optionLabelPath="content.firstName"}}
 </script>

查看工作示例here