0

有人可以解释为什么这样做:

App.js 中的代码:

App.ApplicationRoute = Ember.Route.extend({
  setupController : function (params) {
    this.controllerFor('food').set('model', App.Food.find(params.food_id));
  }
});

但以下不会,除非我明确声明App.FoodController = Ember.ObjectController.extend();

App.FoodRoute = Ember.Route.extend({
  model : function(params) {
    return App.Food.find(params.food_id);
  }
});

这是我在 index.html 中使用的代码,不会在代码块之间更改

<script type="text/x-handlebars" data-template-name="application">     
  {{ outlet }}
</script>     

<script type="text/x-handlebars" data-template-name="food">
  {{name}}
</script>

路由器:

App.Router.map(function() {
  this.resource( 'foods' );
  this.resource( 'food', { path : '/food/:food_id' } );  
});
4

1 回答 1

0

您显示的代码似乎没问题。这是一个证明它的工作小提琴:http: //jsfiddle.net/ebXeS/2/

代码唯一的错误是这部分(它被排除在小提琴之外):

App.ApplicationRoute = Ember.Route.extend({
  setupController : function (params) {
    this.controllerFor('food').set('model', App.Food.find(params.food_id));
  }
});

根据您的路由器定义,您的应用程序路由的参数中不应包含 food_id。不仅如此,您还应该在 uhm... FoodRoute 中访问食物路线的控制器。阅读有关 Ember 及其路由方式的更多信息 ( http://emberjs.com/guides/ )。

于 2013-02-06T07:14:42.317 回答