gpt4 book ai didi

javascript - EmberJS 2 未定义嵌套路由中的路由动态段

转载 作者:行者123 更新时间:2023-12-03 05:47:58 26 4
gpt4 key购买 nike

对 ember 真的很陌生,正在尝试设置基本的(在我看来)路线。

我有日历资源,我想显示单独的日历。

我的 app/router.js 具有以下内容:

this.route('calendar', {path: 'calendars/:calendar_id'}, function () {
this.route('show');
this.route('edit');
});
this.route('calendars', function(){
this.route('create');
});

文件夹如下:

app/routes: [
calendars: [create, index],
calendar: [edit, show]
]
app/templates: [
calendars: [create, index]
calendar: [edit, show]
]

app/routes/calendar/show.js中:

import Ember from 'ember';
export default Ember.Route.extend({
model(params) {
return this.store.findRecord('calendar', params.calendar_id);
}
});

当我访问 http://SERVER/calendars/5/show 时出现问题(5 是 :calendar_id 部分,SERVER 是托管 ember 应用程序的主机):

  • 当我记录参数时 - 它们未定义
  • 在开发工具中,我看到 Ember 以某种方式向我的服务器发出 POST 请求:http://SERVER/calendars/5(:calendar_id 部分,服务器位于同一域且我的后端所在)。
  • 无论我是否在 app/routes/calendar/show.js 文件中注释掉 model() 函数,都会发生这种情况。
  • 显然,Ember 知道该请求要使用什么 calendar_id
  • 但我不知道对服务器的调用发生在哪里:

    • 如果我完全注释掉 model(){},我的模板将呈现模型记录(Ember 获取的日历记录)。
    • 另一方面,如果我尝试在 model() 中记录 params 并注释掉 this.store.findRecord 部分, params 未定义,会引发错误。
  • 我一开始以为这是我的 DS.RESTAdapter,因为我已将 updateRecord 更改定义为假 PUT 请求(我的服务器不允许这样做),但我注释掉了整个文件,它仍然执行此查询。

  • 我已经清理了 dist/tmp/,升级到 2.9.0,但它的作用是一样的。
  • 我没有定义 Controller

如果路由中缺少 model() Hook ,Ember 如何发出 POST 请求,我没有定义 Controller 。另外我该如何修复它才能正常工作? ;p

编辑[2]:

我现在正在尝试这个,我认为它有点管用,但看起来很丑:

this.route('calendars',{ path: '/calendars'}, function(){
this.route('create');
});
this.route('calendar', { path: '/' }, function () {
this.route('show', { path: '/calendars/:calendar_id/show' });
this.route('edit', { path: '/calendars/:calendar_id/edit' });
});
this.route('index', { path: ''});

最佳答案

Ember 足够聪明,如果您不创建默认路由,它会生成默认路由;如果您不创建模型函数,它会生成默认模型。

它根据路线名称执行此操作,即如果您的路线是“日历”,它会根据“日历”模型生成模型函数。

尝试根据 ember 文档使用参数明确定义您的路由路径: https://guides.emberjs.com/v2.9.0/routing/defining-your-routes/

this.route('calendar', function () {
this.route('show', { path: '/:calendar_id/show' });
this.route('edit', { path: '/:calendar_id/edit' });
this.route('create');
});

关于javascript - EmberJS 2 未定义嵌套路由中的路由动态段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40265690/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com