Javascript EmberJS-不推荐使用对象代理-访问模板中控制器的属性

Javascript EmberJS-不推荐使用对象代理-访问模板中控制器的属性,javascript,ember.js,handlebars.js,htmlbars,Javascript,Ember.js,Handlebars.js,Htmlbars,我试图理解某些特殊性 在一个控制器中设置xxx属性并迭代#每个都可以工作,而与yyy#每个看似相同的操作不会 我将重点介绍代码和可运行代码段: 余烬起动器套件 {{outlet}} 指数 {{#模型中的每种颜色} {{{链接到“color.show”color}{{color.name}{{{/链接到}} {{/每个}} {{{#xxx中的每个项目} {{item.name} {{/每个}} 色彩/表演 {{model.name} {{{#yyy中的每个项目} {{item.nam

我试图理解某些特殊性

在一个控制器中设置
xxx
属性并迭代
#每个
都可以工作,而与
yyy
#每个看似相同的操作不会

我将重点介绍代码和可运行代码段:



余烬起动器套件
{{outlet}}
指数
    {{#模型中的每种颜色}
  • {{{链接到“color.show”color}{{color.name}{{{/链接到}}
  • {{/每个}}
    {{{#xxx中的每个项目}
  • {{item.name}
  • {{/每个}}
色彩/表演 {{model.name}
    {{{#yyy中的每个项目}
  • {{item.name}
  • {{/每个}}
{{{#链接到“应用程序”}返回列表{{/link to}
好的,正如我所料-问题在于命名约定和过去的遗迹(
ObjectController
)。声明
ColorController
为模型创建控制器,而不是路由。您需要在此处为路由设置控制器,因此将
ColorController
更改为
ColorShowController
可以解决问题并呈现值。反对的声音消失了

App=Ember.Application.create();
App.Color=DS.Model.extend({
名称:DS.attr('string')
});
App.Router.map(函数(){
this.resource('color',function()){
this.route('show',{path:':color_id'});
});
});
App.IndexRoute=Ember.Route.extend({
模型:函数(){
返回[
{id:1,名称:“Red”},
{id:2,名称:“Blue”},
];
}
});   
App.IndexController=Ember.Controller.extend({
xxx:[{name:“a”},{name:“b”}],//这很好用
});     
App.ColorShowController=Ember.Controller.extend({
init:function(){
这个;
info(“为了再次检查,此控制器已初始化”);
},
yyy:[{name:“c”},{name:“d”}],//这会触发弃用
//您试图从…访问'yyy'。。。
//但不推荐使用对象代理。请改用'model.yyy'
});

余烬起动器套件
{{outlet}}
指数
    {{#模型中的每种颜色}
  • {{{链接到“color.show”color}{{color.name}{{{/链接到}}
  • {{/每个}}
    {{{#xxx中的每个项目}
  • {{item.name}
  • {{/每个}}
色彩/表演 {{model.name}
    {{{#yyy中的每个项目}
  • {{item.name}
  • {{/每个}}
{{{#链接到“应用程序”}返回列表{{/link to}
您的代码段不会触发对象代理弃用。另外,您没有包括
Color
model的声明。谢谢@Daniel-我已经包括了
Color
model(这有关系吗?),并包括了一个显示不推荐警告的屏幕截图。我的问题仍然有效-
controller.xxx
有效,而
controller.yyy
不起作用。对于任何更改我解释的编辑器-我确定我写的内容,我不是说
color
路线,而是说
color
作为模型。请阅读更多关于
ObjectController
及其实际工作原理的信息。如果这只是
color
route的控制器,那么为什么它会在
color.show
route?;)中引发来自控制器的反对意见实际上,ColorController为ColorRoute设置了控制器,因此余烬将为ColorShowRoute生成一个控制器。Ember将根据从模型挂钩返回的内容生成ObjectController或ArrayController,这就是弃用警告的来源。P.S.ember cli 0.2.7包含一个插件,该插件禁用代理控制器的生成。@好的,我想你是对的。谢谢你的解释!谢谢大家,丹尼尔,谢谢大家。我在工作中的项目中使用CLI,但为了独立测试用例,我必须创建非CLI模板——在这样做的过程中,我遇到了这种特殊性(一旦您了解它,这似乎很明显)。
App.IndexController = Ember.Controller.extend({
  xxx : [{name:"a"}, {name:"b"}], // this works just fine
});  

{{#each item in xxx}}
  <li>{{item.name}}</li>
{{/each}}
App.ColorController = Ember.Controller.extend({
  yyy : [{name:"c"}, {name:"d"}], // this triggers deprecation
  // You attempted to access `yyy` from ...
  // But object proxying is deprecated. Please use `model.yyy` instead
});

{{#each item in yyy}}
  <li>{{item.name}}</li>
{{/each}}