【问题标题】:What's the scope of definition of "persistent state" in EmberJS?EmberJS 中“持久状态”的定义范围是什么?
【发布时间】:2015-02-23 17:40:49
【问题描述】:

这听起来像是一个迂腐的问题。对不起:)

我有这样的情况...这是我的路由器定义:

Router.map(function() {
  this.resource('gobernadores', { path: '/gobernadores' }, function() {
    this.resource('gobernador', { path: '/:id_estado' }, function() {
      this.route('simulacion', { path: '/simulacion' }),
      this.route('info', { path: '/info' })
    })
  });
  this.route("login");
  this.route("bienvenido");
});

在“gobernadores”路线中,我有省份列表。你可以看到它是一个嵌套布局。在同一页面中,我们显示了当前选择的省份(即 gobernador 路线)。在该 gobernador 路线的模板中,我有一个选项卡,其中包含两个元素...,一个显示路线“模拟”,另一个显示路线“信息”的模板(该省)。

现在,问题是:当用户从一个省跳到另一个省时(通过单击屏幕左侧的导航菜单),我想为每个省保留当前选择的选项卡。

所以,如果用户当前正在查看 X 省的模拟结果,然后他点击链接转到 Y 省(在那里他将看到 Y 省的“信息”),然后他就去了回到 X 省,我希望应用程序将用户带回到他所看到的屏幕(X 省的模拟)。

您不能将该信息存储在控制器 (GobernadorController) 中,因为我可以看到控制器无法保持状态,它是无状态的。

所以...,我必须将该信息移动到路线模型 (GobernadorRouteModel)...

我的疑问:可以吗?为什么我的怀疑?正因为如此:http://emberjs.com/guides/concepts/core-concepts/

上面写着:

模型

模型是存储持久状态的对象。模板是 负责将模型显示给用户 HTML。在许多应用程序中,模型是通过 HTTP JSON API 加载的, 尽管 Ember 与您选择的后端无关。

路线

路由是一个对象,它告诉模板它应该使用哪个模型 显示。

这个 GobernadorRouteModel 不是我保留在后端的东西。我无意这样做。那么,我是否违反了关于一个好的 EmberJS 应用程序的一般建议?

或者换句话说:这里的“持久”不一定意味着“你保存到数据库中的东西”,对吧?它只是“你想要保留的东西......,即使只是在应用程序的会话期间,在内存中”。

提前致谢, 拉卡

【问题讨论】:

    标签: model-view-controller ember.js


    【解决方案1】:

    您不能将该信息存储在控制器 (GobernadorController) 中,因为我可以看到控制器无法保持状态,它是无状态的。

    这可能是您出现问题的地方。控制器不是无状态的。 Ember 中的控制器是单例的,并在应用程序的整个生命周期中保持其状态。但是,这将在 Ember 2.0 中发生变化。引用该 RFC:

    持久状态应该存储在路由对象中,并作为初始属性传递给可路由组件。

    因此,如果您想实现前向兼容,这就是我会采取的方法。在我看来,模型实际上应该只用于持久状态(持久意味着它在页面加载之间保持不变)。为了保持会话状态,我会按照 RFC 所说的那样做,并将该状态保留在路由中,并在 resetController 挂钩期间将其注入控制器。

    或者,如果您不想那么花哨并且不关心前向兼容性,则只需在其中存储状态的全局 Session 对象。这就是我目前的做法,并且效果很好. (尽管我们可能会远离它。)

    TL;DR:不,我不认为您将模型用于其预期目的。

    【讨论】:

    • 哦,我明白了...与其将“选定选项卡”作为路线模型的属性,我应该将其作为路线的直接属性,对吧?
    • 或者......就像你说的那样,让那个映射(省 - > selectedTab)成为那个单例控制器的属性。
    • 是的,其中任何一个都可以。看起来 Ember 2.0 的做法是将属性放在路由上,然后使用操作更改它。
    猜你喜欢
    • 1970-01-01
    • 2011-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-09
    • 2021-12-18
    相关资源
    最近更新 更多