关于 Ember 教程的问题,为什么 link http://localhost:4200/rentals/grand-old-mansion 不起作用

Question about the Ember tutorial, why the link http://localhost:4200/rentals/grand-old-mansion does not work

我正在学习ember。我按照教程构建了一个网络应用程序。

在教程的第 2 部分中,URL 的路由参数部分如下:

https://guides.emberjs.com/release/tutorial/part-2/route-params/

我发现了一些奇怪的东西。

下面link的测试用例没有通过。

http://localhost:4200/rentals/grand-old-mansion

我发现如果我从根目录(即 /)点击 link, 它可以正确显示租金。

然后,如果我刷新页面,它就不起作用了。 报错信息如下:

Uncaught (in promise) Error: No model was found for 'rental' and no schema handles the type

我检查了所有没有拼写错误的文件。 有什么问题?

您的问题可能是您的 model 挂钩未实现。一点上下文:

这里要理解的重要一点是,如果您创建一个 <LinkTo @route="rental" @model={{@rental}}> 之类的 link 并单击它,rental 路由填充上的 model() 挂钩被执行。相反,您传递给 @model 的任何内容都将被使用。做Router#transitionTo('rental', model).

时也是如此

之所以可行,是因为您已经加载了数据。但是,当您重新加载时,rental 路由的 model 挂钩将被执行。并且因为您没有实现它,所以将使用默认模型挂钩。而这个非常神奇。它会检查您的动态细分的名称,即 rental_id。如果它 somethind_id,它基本上会 return this.store.findRecord('something', params.something_id)。因此,在您的情况下,默认模型挂钩等效于:

model(params) {
  return this.store.findRecord('rental', params.rental_id);
}

但您没有名为 rental 的 ember 数据模型,因此您收到错误消息:

Error: No model was found for 'rental'

因此,要修复它,您必须检查 model 挂钩是否存在并正确实施。


一条重要提示:

如果您传递字符串或数字,

<LinkTotransitionTo 执行 model() 挂钩。 所以你可以做 <LinkTo @route="rental" @model={{@rental.id}}> 并且它 执行模型挂钩,使用你传递给 @model 作为动态段而不是模型值。我个人已经看到一些 总是 传递 id 的应用程序,因此它们不会出现您没有注意到的错误。就个人而言,这就是我推荐的。