为什么我看到"加载路线时出错"与ember?

Ada*_*sky 0 ember.js ember-data

ember rc1,ember-data rev 12.所有其他路由正确加载,不确定为什么我看到这个错误.当我尝试访问show route即/ files/groups/5时会发生这种情况.索引路线呈现良好.

我已经粘贴了下面的堆栈跟踪,但它的信息量不大.我在这里做什么基本上是错的?

我的路线/控制器设置如下:

this.resource('files', { path : '/files' }, function() {      
  this.resource('groups', { path : '/groups' }, function() {      
    this.route('show', { path : '/:asset_link_group_id' });      
  });
});

AssetLinksApp.GroupsShowController = Ember.ArrayController.extend({
  content : Ember.A(),
  assetLinkGroup : null
});

AssetLinksApp.GroupsShowRoute = AssetLinksApp.AuthRequiredRoute.extend({
  setupController : function(controller,model) {    
  controller.set('content',model.get('asset_links'));
  controller.set('assetLinkGroup',model);
  },
  model : function(params) {    
    return AssetLinksApp.AssetLinkGroup.find(params.asset_link_group_id);
  }
});
Run Code Online (Sandbox Code Playgroud)

堆栈跟踪:

加载路由时出错:TypeError {} exchange_vendor.js:12078

(匿名函数)exchange_vendor.js:12078 Ember.Router.reopenClass.defaultFailureHandler.setup exchange_vendor.js:35011 failure exchange_vendor.js:34448 objects.concat.context exchange_vendor.js:34497 invokeCallback exchange_vendor.js:17846 Promise.then exchange_vendor. js:17893 EventTarget.trigger exchange_vendor.js:17822 results exchange_vendor.js:17924 RunLoop._prev exchange_vendor.js:15911 Ember.handleErrors exchange_vendor.js:12140 invoke exchange_vendor.js:15909 iter exchange_vendor.js:15981 RunLoop.flush exchange_vendor. js:16035 RunLoop.end exchange_vendor.js:15940 tryable exchange_vendor.js:16143 Ember.tryFinally exchange_vendor.js:12831 Ember.run.end exchange_vendor.js:16146 Ember.tryFinally exchange_vendor.js:12833 Ember.run exchange_vendor.js: 16102 Ember.HashLocation.Ember.Object.extend.onUpdateURL exchange_vendor.js:36690 jQuery.event.dispatch exchange_vendor.js:3144 jQuery.event.add.elemData.handle.eventHandle

Ted*_*nny 5

该模型返回单个记录.但是你已经定义了一个ArrayController.

Ember.js会自动将模型放在控制器的content属性中,这会导致错误,因为它会将单个记录放在数组控制器中.

即使你setupController在它发射之前你已经超越它,Ember.js仍然会将模型放在控制器中.目前无法阻止这种情况.


2014年6月3日更新(Ember> 1.0):

如果您现在覆盖setupControllerEmber,则不再设置该model属性.


我能想到的唯一解决方案是为您的路线添加资源:

this.resource('files', { path : '/files' }, function() {      
  this.resource('groups', { path : '/groups' }, function() {      
    this.resource('group', { path : '/:asset_link_group_id' }, function() {
      this.route('index');
    });      
   });
});
Run Code Online (Sandbox Code Playgroud)

这意味着您有一个GroupController包含该组的对象controller()和一个GroupIndexController包含assets links数组的数组controller().

AssetLinksApp.GroupIndexController = Ember.ArrayController.extend({
  assetLinkGroup : null
});

AssetLinksApp.GroupIndexRoute = AssetLinksApp.AuthRequiredRoute.extend({
  setupController : function(controller,model) {    
    controller.set('content',model);
    controller.set('assetLinkGroup', this.modelFor('group'));
  },
  model : function(params) {    
    return this.modelFor('group').get('asset_links');
  }
});
Run Code Online (Sandbox Code Playgroud)

现在应该命名您的模板group/index而不是groups/show.至于group模板,它可以是一个包含的空模板{{outlet}}.

最重要的是要注意:如果你的控制器是一个对象控制器,你必须从模型钩子返回一个对象,如果你的控制器是一个数组控制器,那么你必须从模型钩子返回一个数组.

光明的一面是,这促使你遵循我可能核心团队认为更好的某种设计.