EmberJS中“持久状态”的定义范围是什么?

cyvaqqii  于 2022-11-23  发布在  其他
关注(0)|答案(1)|浏览(186)

这听起来可能是一个迂腐的问题。抱歉:)
我有一个这样的案例......下面是我对路由器的定义:

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路线的模板中,我有一个标签,有两个元素......,一个显示路线“simulacion”,另一个显示路线模板“info”(该省份)。
现在,问题来了:当用户从一个省跳到另一个省(通过点击屏幕左侧的导航菜单)时,我想在内存中保留每个省当前选择的选项卡。
因此,如果用户当前正在查看X省的模拟结果,然后他点击链接前往Y省(在那里他将看到Y省的“信息”),然后他返回X省,我希望应用程序将用户带回他所看到的屏幕(X省的模拟)。
您不能将这些信息存储在控制器(GobernadorController)中,因为我可以看到控制器不能保持状态,它是无状态的。
所以...,我必须将这些信息移动到路线模型(GobernadorRouteModel)中...
我的怀疑是不是可以?为什么我的怀疑?因为这样:http://emberjs.com/guides/concepts/core-concepts/
上面写着:
型号
模型是存储持久状态的对象。模板负责将模型转换为HTML向用户显示。在许多应用程序中,模型是通过HTTP JSON API加载的,尽管Ember对您选择的后端是不可知的。
工艺路线
路线是一个对象,它告诉模板应该显示哪个模型。
这个GobernadorRouteModel不是我在后台坚持的东西。我没有打算这样做。那么,我是否违反了一个好的EmberJS应用程序的一般建议呢?
或者换句话说:这里的“持久”并不一定意味着“你保存到DB中的东西”,对吗?它只是“你想保留的东西......,即使只是在应用程序的会话期间,在内存中”。
先谢谢你啦Raka

hec6srdp

hec6srdp1#

您不能将这些信息存储在控制器(GobernadorController)中,因为我可以看到控制器不能保持状态,它是无状态的。
这可能就是你的问题所在。控制器 * 不是 * 无状态的。Ember中的控制器是单例的,并且在应用的整个生命周期中保持它们的状态。但是,这在Ember 2.0中会发生变化。引用该RFC:
永久状态应存储在路由对象中,并作为初始属性传递给可路由组件。
因此,如果你试图向前兼容,这就是我会采取的方法。在我看来,模型应该只用于持久化状态(持久化意味着它在页面加载之间被持久化)。为了保持会话状态,我会按照RFC的说法,在路由中保持该状态,并在resetController钩子期间将其注入控制器。
或者,如果你不想太花哨,也不关心向前兼容性,那么就用一个全局Session对象来存储状态。这就是我目前的做法,它运行得很好。(尽管我们可能会放弃它。)
TL;DR:不,我不认为你在使用模型来达到预期的目的。

相关问题