关于 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
挂钩是否存在并正确实施。
一条重要提示:
如果您传递字符串或数字,<LinkTo
和 transitionTo
将 执行 model()
挂钩。
所以你可以做 <LinkTo @route="rental" @model={{@rental.id}}>
并且它 将 执行模型挂钩,使用你传递给 @model
作为动态段而不是模型值。我个人已经看到一些 总是 传递 id 的应用程序,因此它们不会出现您没有注意到的错误。就个人而言,这就是我推荐的。
我正在学习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
挂钩是否存在并正确实施。
一条重要提示:
如果您传递字符串或数字,<LinkTo
和 transitionTo
将 执行 model()
挂钩。
所以你可以做 <LinkTo @route="rental" @model={{@rental.id}}>
并且它 将 执行模型挂钩,使用你传递给 @model
作为动态段而不是模型值。我个人已经看到一些 总是 传递 id 的应用程序,因此它们不会出现您没有注意到的错误。就个人而言,这就是我推荐的。