【问题标题】:Ember JS nested resources: Assertion failed: Cannot call get with 'id' on an undefined objectEmber JS 嵌套资源:断言失败:无法在未定义的对象上调用带有 'id' 的 get
【发布时间】:2013-12-16 01:25:52
【问题描述】:

我一生都被一个 EmberJS 问题所困扰,根本无法解决这个问题。

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

App.Router.map(function(){     
        this.resource('stacks', function(){
                this.resource('stack',{path:'/:stack_id'});
        });
}); 

但是,当我访问 /stacks 页面时,我得到:

断言失败:无法在未定义的对象上调用带有 'id' 的 get

Stacks 和 Stack 都有一个稍后在代码中为它们定义的路由,例如“Ember.Route.extend({})”,并且 Stacks 路由从数据存储中返回“stack”模型。上面有什么明显的错误吗,因为我正在按照示例进行操作,但在我看来我没有做错任何事情。

谢谢

【问题讨论】:

    标签: ember.js ember-router


    【解决方案1】:

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

    App.StackRoute = Em.Route.extend({
    
      serialize: function(model){
        return { stack_id: model.get('id')};
      }
    });
    

    【讨论】:

    • 它有一个 'id' 属性。我目前正在使用“夹具”数据
    • 那么您应该可以将该序列化方法添加到上面的堆栈路由中。
    • 就是这样,我花了大约 2 个小时试图敲打我的大脑,看看它为什么不起作用。官方模板在“动态细分”文档中根本没有说明任何内容:emberjs.com/guides/routing/specifying-a-routes-model
    • 它在定义你的路线部分,你只是领先于游戏;)emberjs.com/guides/routing/defining-your-routes/…
    • 这是因为你重写了 serialize 方法,所以它在 serialize 方法的默认实现中不再崩溃。如果您要使用该模型创建一个链接,它将无法正常工作,它会将链接创建为 /stacks/undefined。 serialize 钩子用于构建 url。实际上,您现在的网址可能未定义,我不确定您是如何导航到该项目的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-24
    • 1970-01-01
    • 1970-01-01
    • 2016-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多