Emberjs应用程序路由和控制器

时间:2013-02-05 05:43:44

标签: ember.js

有人可以解释为什么会有效:

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' } );  
});

1 个答案:

答案 0 :(得分: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/)。