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
该模型返回单个记录.但是你已经定义了一个ArrayController.
Ember.js会自动将模型放在控制器的content属性中,这会导致错误,因为它会将单个记录放在数组控制器中.
即使你setupController在它发射之前你已经超越它,Ember.js仍然会将模型放在控制器中.目前无法阻止这种情况.
如果您现在覆盖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}}.
最重要的是要注意:如果你的控制器是一个对象控制器,你必须从模型钩子返回一个对象,如果你的控制器是一个数组控制器,那么你必须从模型钩子返回一个数组.
光明的一面是,这促使你遵循我可能核心团队认为更好的某种设计.
| 归档时间: |
|
| 查看次数: |
3994 次 |
| 最近记录: |