Ember.js: 使用 this.transitionTo 跳过加载模型

创建于 2013-12-22  ·  3评论  ·  资料来源: emberjs/ember.js

我不确定这是否是故意的行为,但让我解释一下。 如果我在具有动态段的路线上使用 transitionTo,则永远不会调用目标路线上的模型方法。 本质上,我只是通过一个带有 id 的参数,但我仍然想加载正确的模型。

如果我使用正确的 URL 刷新页面,尽管模型加载得很好。 我整理了一个代码笔来演示。

http://codepen.io/anon/pen/LsfhB

当前版本将登出控制台“我在这里”。 如果您查看 IndexRoute,则有一个注释掉的过渡。 如果启用,“我在这里”永远不会触发。

这是预期的吗? 如果是这样,我应该在哪里加载我的模型以进行确认路线?

最有用的评论

如果您将转换更改为this.transitionTo('confirm', 1);那么它将按您的预期工作。

IIRC 如果您将原语(字符串、数字)传递给转换而不是完整模型,那么它会认为这是一个 ID 并使用它来构建调用model ,但是如果您通过任何复杂的东西(在在这种情况下是一个对象)然后它会将其视为您已传递模型,因此不会调用模型挂钩。

API 文档可能会使用传递 ID 而不是完整模型的示例: http :

希望这是有道理的

所有3条评论

如果您将转换更改为this.transitionTo('confirm', 1);那么它将按您的预期工作。

IIRC 如果您将原语(字符串、数字)传递给转换而不是完整模型,那么它会认为这是一个 ID 并使用它来构建调用model ,但是如果您通过任何复杂的东西(在在这种情况下是一个对象)然后它会将其视为您已传递模型,因此不会调用模型挂钩。

API 文档可能会使用传递 ID 而不是完整模型的示例: http :

希望这是有道理的

现在有道理。 在您发表评论后,我最初的直觉问题是您如何传入多个参数? 但看起来您只是将它们作为单独的参数传递。

this.transitionTo('confirm.url', 1, 'the-slug-I-want');

这对我很有效。

问题在这里,如果您有一条带有子路由的路由,所有子路由都带有动态段:
例如
this.route('organization', { path: 'organizations/:organization_id' }, function() {
this.route('project', { path: 'projects/:project_id' }, function() {
this.route('screen', { path: 'screens/:screen_id' });
});
我在另一条路线上,例如 auth 路线。 当我去 this.transitionTo('organization.project.screen',
{organization_id: 'grege23-234-4c3e-96fe-234423' },
{project_id: '234234-23423-4b99-a492-234' },
{screen_id: '34534-48f4-471d-ad17-3'45 });
我什么也没看到,因为模型没有加载。
你怎么能去这个?

此页面是否有帮助?
0 / 5 - 0 等级