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

atmip9wb  于 2022-11-05  发布在  其他
关注(0)|答案(1)|浏览(125)

我现在正在学习ember。我按照教程建立一个网络应用程序。
在本教程的第2部分中,Route Params部分的URL如下所示:
https://guides.emberjs.com/release/tutorial/part-2/route-params/
我发现了一些奇怪的东西。
以下链接的测试用例未通过。
地址:http://localhost:4200/rentals/大老宅
我发现,如果我点击链接从根(iidoee./),它可以显示租金正确。
然后,如果我刷新页面,它不工作.错误信息如下:

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

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

nimxete2

nimxete21#

你的问题可能是,你的model钩子没有实现。
这里需要理解的重要一点是,如果你创建了一个类似<LinkTo @route="rental" @model={{@rental}}>的链接并点击它,rental路径上的model()钩子fill not 会被执行,而你传递给@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数据模型,因此您会收到错误:
错误:找不到'rental'的模型
因此,要修复它,您必须检查您的model挂钩是否存在,并正确实现。
一个重要注意事项:
<LinkTotransitionTo * 将 * 执行model()挂钩,如果你传递一个字符串或一个数字。所以你可以做<LinkTo @route="rental" @model={{@rental.id}}>,它 * 将 * 执行模型挂钩,使用你传递给@model的动态段,而不是模型值。我个人见过一些应用程序 * 总是 * 传递id,所以他们不会有你没有注意到的错误。就我个人而言,这是我要推荐的。

相关问题