Ember.js渲染模板在其他模板中没有获取模型

时间:2014-09-07 14:59:21

标签: javascript ember.js

我遇到了一个问题,当我尝试从不同的路线使用该模型时,它无法正常工作。

以下是从索引路线获取的模型中的图表绘制的工作示例:http://jsbin.com/kulefogoqera/1/edit

App.IndexRoute = Ember.Route.extend({
    model: function() {
        return Ember.$.getJSON('http://www.highcharts.com/samples/data/jsonp.php?filename=aapl-c.json&callback=?');
    }
});

我修改过它并做了一个名为图表的单独模板,现在我想把它渲染成索引路线,但不能从图表路线获取模型: http://jsbin.com/yotinemubinu/1/edit

App.IndexRoute = Ember.Route.extend({ 
    renderTemplate: function(controller, model) {
      console.log(this.modelFor('charts'));
        this.render('index');
        this.render('charts', {
            into: 'index',
            outlet: 'charts',
            controller: this.controllerFor('charts'),
            model: this.modelFor('charts')
        });
    }
});

App.ChartsRoute = Ember.Route.extend({
    model: function() {
        return Ember.$.getJSON('http://www.highcharts.com/samples/data/jsonp.php?filename=aapl-c.json&callback=?');
    }
});

这是我的误解吗?模板只能从该路径的模型钩子中呈现吗?

2 个答案:

答案 0 :(得分:1)

modelFor无法获取未被击中的路线的模型。它只是输出undefined。您可以使用console.log对此进行测试。 http://jsbin.com/yotinemubinu/4/edit

this.render('charts', {
  into: 'index',
  outlet: 'charts',
  controller: this.controllerFor('charts'),
  model: this.modelFor('charts')
});

此外,您应该延长ObjectController而不是Controller

您应该阅读此部分:http://emberjs.com/guides/routing/

答案 1 :(得分:0)

App.IndexRoute = Ember.Route.extend({
setupController: function() {
this.controllerFor('charts').set('promise', Ember.$.getJSON('http://www.highcharts.com/samples/data/jsonp.php?filename=aapl-c.json&callback=?'))
  }


}); 

这一改变解决了这个问题:

App.ChartsController = Ember.Controller.extend(Ember.PromiseProxyMixin,{ ...

修改后的jsbin http://jsbin.com/yotinemubinu/5/edit