我现在正在学习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
我检查了所有没有打字错误的文件。什么问题?
1条答案
按热度按时间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)
。所以在你的例子中,默认的模型钩子等价于:但是您没有名为
rental
的ember数据模型,因此您会收到错误:错误:找不到'rental'的模型
因此,要修复它,您必须检查您的
model
挂钩是否存在,并正确实现。一个重要注意事项:
<LinkTo
和transitionTo
* 将 * 执行model()
挂钩,如果你传递一个字符串或一个数字。所以你可以做<LinkTo @route="rental" @model={{@rental.id}}>
,它 * 将 * 执行模型挂钩,使用你传递给@model
的动态段,而不是模型值。我个人见过一些应用程序 * 总是 * 传递id,所以他们不会有你没有注意到的错误。就我个人而言,这是我要推荐的。