下面的代码可以正常工作,因为我可以environments
通过content.dev.name
.
不过,我正在努力通过 AJAX 请求填充这些数据。
我有一个休息 API,它返回如下控制器中的结构。应用加载时需要调用一次。
这是我的工作代码:
控制器
App.EnvironmentsController = Ember.Controller.extend();
App.EnvironmentsController.reopenClass({
find: function(){
return {dev: {key: 'dev', name: 'Development'}, prod: {key: 'prod', name: 'Production'}};
return this.content;
},
});
App.EnvironmentsView = Ember.View.extend({
templateName: 'environments'
});
路线
...
router.get('applicationController').connectOutlet('environments', App.EnvironmentsController.find());
...
模板
<script type="text/x-handlebars" data-template-name="environments">
<ul id="env-menu">
{{#with content}}
<li>{{dev.name}}</li>
<li>{{prod.name}}</li>
{{/with}}
</ul>
</script>
这是带有 AJAX 的控制器,我无法将数据通过相同格式传递给模板。
注意:我知道 response.data.environments 本身返回的结构与我上面的手动编码对象相同。
App.EnvironmentsController = Ember.Controller.extend();
App.EnvironmentsController.reopenClass({
environments: {},
find: function(){
$.ajax({
url: 'http://localhost:3000/environments',
dataType: 'json',
context: this,
success: function(response){
this.environments = response.data.environments;
}
});
return this.environments;
},
});
App.EnvironmentsView = Ember.View.extend({
templateName: 'environments'
});
请注意,当控制器是数组控制器时,我有类似的工作,并且数据作为数组返回。我需要知道如何专门处理对象。
更新:来自问题的更多信息
这是一个小提琴:http: //jsfiddle.net/coder1/csvZX/
我对不同的模式持开放态度。我只是想通过控制器获取对象并通过控制器发送它。
这是我开始使用的一个非常棒的教程 ( http://trek.github.com/ ),我可以使用数组控制器来完成这项工作,而不是在我使用单个对象时。