Ember.js在渲染之前有很多关系没有解决

时间:2014-07-07 23:32:47

标签: javascript ember.js ember-data promise

当我尝试使用view把手帮助器渲染chart模型中包含的each模型列表时,view模型的promise数组不会出现#39} ; t在each帮助器呈现之前解析,留空li s:

problem

模板:

<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
        }
    ];

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}}

http://emberjs.jsbin.com/OxIDiVU/791/edit