当我尝试使用view
把手帮助器渲染chart
模型中包含的each
模型列表时,view
模型的promise数组不会出现#39} ; t在each
帮助器呈现之前解析,留空li
s:
模板:
<script type="text/x-handlebars" id="chart-container">
{{views}}
<ul>
{{#each view in views}}
<li>{{view}}</li>
{{/each}}
</ul>
</script>
奇怪的是,如果我将each
帮助器更改为{{#each views}}
,则可以正常工作。
如果使用view in views
帮助each
解决了承诺的hasMany关系,我该如何进行视图渲染?以下是相关的模型和装置:
displayItem model:
var DisplayItem = DS.Model.extend({
name: DS.attr("name"),
display: DS.belongsTo("display", {async: true})
});
图表模型:
var Chart = DisplayItem.extend({
views: DS.hasMany("view", {async: true})
});
查看模型:
var View = DS.Model.extend({
name: DS.attr("string"),
chart: DS.belongsTo("chart", {async: true})
});
相关灯具数据:
Chart.FIXTURES = [
{
id: 1,
name: "Derp",
display: 1,
views: [1, 2],
defaultView: 1
}
];
View.FIXTURES = [
{
id: 1,
name: "Test 1",
chart: 1
},
{
id: 2,
name: "Test 2",
chart: 1
}
];
答案 0 :(得分:1)
要回答您的问题,路线是最简单的地方。使用嵌套的承诺Ember将不会设置控制器等,直到最深的承诺得到解决。
App.ChartContainerRoute = Em.Route.extend({
model: function(){
return this.store.find('chart').then(function(charts){
return Em.RSVP.all(charts.getEach('views')).then(function(){
return charts;
});
});
}re
});
通常我建议不要等待所有的异步调用(因为Ember会异步将它们注入页面)。如果您在插入视图后尝试修改视图,还有其他模式可以解决此问题,同时提供响应更快的应用程序。
您没有指定要在li中显示的任何内容,而您正在使用关键字view
<li>{{view.name}}</li>
http://emberjs.jsbin.com/OxIDiVU/790/edit
view
通常是指与当前模板等关联的视图。
{{#each item in views}}
<li>{{item}}</li>
{{/each}}