Javascript 在余烬路由中使用模型哈希时未保留模型对象

Javascript 在余烬路由中使用模型哈希时未保留模型对象,javascript,ember.js,ember-data,ember-cli,Javascript,Ember.js,Ember Data,Ember Cli,编辑:我已经设置了一个实际的 我试图解决这个问题已经有一段时间了,但我显然不理解模型和setupController之间的关系是如何工作的。我有一个返回散列的模型;两次查找调用的结果: model(params) { return Ember.RSVP.hash({ course: this.store.find('course', params.course_id), topics: this.store.find('topic', { course_id: params.

编辑:我已经设置了一个实际的

我试图解决这个问题已经有一段时间了,但我显然不理解模型和setupController之间的关系是如何工作的。我有一个返回散列的模型;两次查找调用的结果:

model(params) {
  return Ember.RSVP.hash({
    course: this.store.find('course', params.course_id),
    topics: this.store.find('topic', { course_id: params.course_id })
  });
},
第一次调用setupController时,
model
的值(如果按预期),类似于
{course:,topics:}
。太棒了,这就是我想要的

但是,下次调用setupController时(例如,转换到另一条路线,然后按浏览器中的“后退”按钮),
模型现在只是课程


为什么在使用散列结果时不保留原始模型?我做错什么了吗?

查看它,原始模型将不会被保留,因为在setupController上,您正在调用controller.set('model',model.course)。当它第一次加载时,它会适当地调用
模型(params{}
函数,但在后退按钮转换和某些
{{link to}
调用时,情况并不总是这样


在您的setupController中,尝试将其更改为
controller.set('course',model.course);
,这样您就不会在执行时覆盖您的模型,并且它将始终能够找到它。

查看它,原始模型将不会被保留,因为在setupController上,您正在调用controller.set('model',model.course)。当它第一次加载时,它会适当地调用
模型(params{}
函数,但在后退按钮转换和某些
{{link to}
调用时,情况并不总是这样


在您的setupController中,尝试将其更改为
controller.set('course',model.course);
,这样您就不会在执行时覆盖您的模型,并且它将始终能够找到它。

当您在此处链接时,您正在发送模型
颜色

{{{#链接到'color'color}{{color.name}{{/link to}}

因此,模型钩子不会运行。如果您将其更改为color.id,它就会工作

有人提到过

在上面的示例中,PhotoRoute的模型钩子将与一起运行 params.photo_id=5。CommentRoute的模型挂钩将不会运行,因为 您为注释段提供了一个模型对象。注释的id 将根据CommentRoute的序列化挂钩填充url


链接此处时,您正在发送模型
颜色

{{{#链接到'color'color}{{color.name}{{/link to}}

因此,模型钩子不会运行。如果您将其更改为color.id,它就会工作

有人提到过

在上面的示例中,PhotoRoute的模型钩子将与一起运行 params.photo_id=5。CommentRoute的模型挂钩将不会运行,因为 您为注释段提供了一个模型对象。注释的id 将根据CommentRoute的序列化挂钩填充url


运气不好,因为下一次调用setupController时,从第一次开始,“model”等于“model.course”。可能是个bug?@typeoneerror-也许?试试controller.set('model',model')?运气不好,因为下一次调用setupController时,“model”等于“model.course”从第一次开始。可能是一个bug?@typeoneerror-也许?试试controller.set('model',model')?
setupController(controller, model) {
    // when first called model will be { course: <Class>, topics: <Class> }
    // next time entered, model will just be <Class> (just the value of "course" )
    // why is the model object not preserved?
   controller.set('model', model.course);
   controller.set('topics', model.topics);
}}
model(params) { return this.store.find('course', params.course_id); }
// now `model` will always be "course" in setupController