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

Ember.js rendering template in other template not fetching model

本文关键字:模型 获取 js Ember 其他      更新时间:2023-09-26

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

以下是从索引路由中提取的模型中绘制图表的工作示例: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=?');
    }
});

我已经修改了它,并制作了一个名为charts的单独模板,现在我想将它渲染到索引路由中,但无法从charts路由中获取模型: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=?');
    }
});

这是我的误解吗?模板只能从该路线的模型挂钩中渲染吗?

modelFor不会为未命中的路由获取模型。它只会输出未定义的。您可以使用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/

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,{ ...

正在处理修改的jsbinhttp://jsbin.com/yotinemubinu/5/edit