"持久状态"的定义范围是什么?在EmberJS?

时间:2015-02-23 17:40:50

标签: model-view-controller ember.js

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

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

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",另一个显示路线模板"信息" (该省)。

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

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

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

所以......,我必须将这些信息移到路线模型中(GobernadorRouteModel)......

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

它说:

  

模型

     

模型是存储持久状态的对象。模板是   负责通过将模型显示给用户来显示模型   HTML。在许多应用程序中,模型通过HTTP JSON API加载,   虽然Ember对你选择的后端是不可知的。

     

ROUTE

     

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

这个GobernadorRouteModel不是我在后端持续存在的东西。我无意这样做。那么,我是否违反了对EmberJS应用程序的一般建议?

或换句话说:"执着"这里并不意味着你保存在DB"中的东西,对吗?它只是"你要保留的东西......,尽管只是在应用程序的会话期间,在内存中#34;。

提前致谢, 拉嘎

1 个答案:

答案 0 :(得分:0)

  

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

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

  

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

因此,如果你想要向前兼容,那就是我要采取的方法。在我看来,模型应该只用于持久状态(持久性意味着它在页面加载之间持续存在)。为了保持会话状态,我会按照RFC的说法进行操作,并在路由中保留该状态,并在resetController挂钩期间将其注入控制器。

或者,如果你不想那么喜欢并且你不关心向前兼容性,那么只需要一个存储状态的全局Session对象。这就是我目前的做法,它的工作原理很好。 (虽然我们可能会远离它。)

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