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

时间:2015-05-26 18:14:21

标签: javascript ember.js ember-data ember-cli

编辑:我已设置实际的repro of the issue on JSBIN

现在试图解决这个问题一段时间了,我显然不明白模型和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: <Class>, topics: <Class> }之类的哈希值。太棒了,这就是我想要的。

但是,下次调用setupController时(例如,转换到另一个路径,然后按浏览器中的后退按钮),model现在只是课程{{ 1}}:

<Class>

如果我只让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()

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

2 个答案:

答案 0 :(得分:3)

您在此处链接时发送模型color

{{#link-to 'color' color}}{{color.name}}{{/link-to}}

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

它提到了here

  

在上面的例子中,PhotoRoute的模型钩子将运行   params.photo_id = 5. CommentRoute的模型钩子从那以后就不再运行了   您为评论段提供了一个模型对象。评论的内容   将根据CommentRoute的序列化挂钩填充网址。

答案 1 :(得分:2)

观察它,原始模型将不会被保留,因为在setupController上,您正在调用controller.set('model',model.course)。首次加载时,它会适当调用{{link-to}}函数,但在后退按钮转换和某些controller.set('course', model.course);调用时,情况并非总是如此。

在你的setupController中,尝试将其更改为def resol(t, y, par): p1111, p1212, p2121, p1112, p1121, p1122, p1221, p1222, p2122 = y gamma, h, H = par ,这样你就不会在执行时覆盖你的模型,它总能找到它。