gpt4 book ai didi

ember.js - 为什么 ember 在单独访问路由时使用相同的 Controller 实例?

转载 作者:行者123 更新时间:2023-12-05 01:09:01 24 4
gpt4 key购买 nike

问题:

当用户重新进入路由时,我在重新使用旧 Controller 实例时遇到了概念问题。在许多示例中, Controller 将用户交互的状态存储在实例变量中。当用户重新进入 Controller 时,这些应该被重置,但没有明确的机制来这样做。

因此,必须有充分的理由使用单个 Controller 实例。它是什么?

我是如何解决这个问题的:

我在 Ember 应用程序中遇到了一个错误, Controller 根据其他地方的用户操作保持本地状态不同步。 Controller 保持用户是否正在编辑“案例”的“名称”的状态。当 Controller 被实例化时,它被设置为“true”,但是当用户取消时,它被设置为“false”。然后用户离开到不同的路线并返回到相同的路线。我得到了相同的 Controller 实例,它已经具有“false”来编辑名称。我希望有“真实”。

Ember 对战导轨:

我来自 Rails 的角度, Controller 为每个请求实例化。请求之间没有共享 Controller 状态。所有实例变量都是请求的本地变量,因此可以安全使用。

回到问题:
为什么 ember 在单独访问路由时使用相同的 Controller 实例?

最佳答案

ember 和 rails 中 Controller 的角色非常不同。如您所知,在 Rails 中, Controller 用作请求准备呈现数据的管道。如果考虑 ember 中的用例,这是主要由路由器扮演的角色。

在您的示例中,您提到编辑状态已不同步。您可以通过多种方式解决此问题,例如,您可以将编辑状态移动到模型,所以而不是 isEditing , 你会调用 model.isEditing (或者只是 isEditing 如果您使用的是 ObjectController)。另一种选择是在进入路线时重置 Controller 的状态。

应该说明这种差异的另一个示例是表单上的保存按钮。最初您可能会想“哦,我要在我的 Controller 上执行保存操作”。这是合乎逻辑的,当您像 Rails 开发人员一样思考时,但保存模型是路由器的责任(特别是如果它导致更改当前路由,因为这是故意难以从 Controller 执行的操作)。

在 ember 中, Controller 的角色是模型和 View 之间的管道。 Controller 实例被重用的事实有点令人困惑,但实际上并不那么重要。当您更改或返回到路由时, Controller 的模型/上下文会有所不同,这就是 View 状态应该存在的位置......在模型中。

关于ember.js - 为什么 ember 在单独访问路由时使用相同的 Controller 实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16240267/

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