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