Ember.js Ember JS嵌套资源:断言失败:无法对未定义的对象使用“id”调用get

Ember.js Ember JS嵌套资源:断言失败:无法对未定义的对象使用“id”调用get,ember.js,ember-router,Ember.js,Ember Router,我一辈子都被困在一个问题上,根本无法摆脱它 我拥有的是一个资源集合,在我的路由器中指定为一个资源,如。这反过来又会加载另一个资源,它基本上是“资源集合”的单个实例。 我的路由器基本上是这样的: App.Router.map(function(){ this.resource('stacks', function(){ this.resource('stack',{path:'/:stack_id'}); }); });

我一辈子都被困在一个问题上,根本无法摆脱它

我拥有的是一个资源集合,在我的路由器中指定为一个资源,如。这反过来又会加载另一个资源,它基本上是“资源集合”的单个实例。 我的路由器基本上是这样的:

App.Router.map(function(){     
        this.resource('stacks', function(){
                this.resource('stack',{path:'/:stack_id'});
        });
}); 
但是,当我访问/stacks页面时,我得到:

断言失败:无法对未定义的对象调用id为的get

堆栈和堆栈都有一个稍后在代码中为它们定义的路由,如'Ember.route.extend{}',堆栈路由从数据存储返回'Stack'模型。上面有没有什么明显的错误,因为我遵循的是一些例子,在我看来我并没有做任何不正确的事情


谢谢

您的堆栈模型是否具有名为stack\u id的属性?如果没有,则需要在堆栈路由上实现序列化方法

App.StackRoute = Em.Route.extend({

  serialize: function(model){
    return { stack_id: model.get('id')};
  }
});

它有一个“id”属性。当时我正在使用“Fixture”数据,那么你应该能够将该序列化方法添加到上面的堆栈路径中。就是这样,我花了大约2个小时试图敲打我的大脑,看看它为什么不起作用。官方模板在“动态分段”文档中根本没有说明这一点:它在定义路线部分,你刚刚领先于游戏;这是因为您正在重写serialize方法,因此它不再在serialize方法的默认实现中崩溃。如果要使用该模型创建指向的链接,它将无法工作,它将创建链接为/stacks/undefined。序列化钩子用于构建url。事实上,你的url现在可能是未定义的,我不知道你是如何导航到该项目。