这听起来像是一个迂腐的问题。对不起:)
我有这样的情况......这是我的路由器定义:
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;。
提前致谢, 拉嘎
答案 0 :(得分:0)
你不能将这些信息存储在控制器(GobernadorController)中,因为我可以看到控制器无法保持状态,它是无状态的。
这可能是您出现问题的地方。控制器不无状态。 Ember中的控制器是单例,并在应用程序的整个生命周期中保持其状态。但是,这会在Ember 2.0中发生变化。引用该RFC:
持久状态应存储在路由对象中,并作为初始属性传递给可路由组件。
因此,如果你想要向前兼容,那就是我要采取的方法。在我看来,模型应该只用于持久状态(持久性意味着它在页面加载之间持续存在)。为了保持会话状态,我会按照RFC的说法进行操作,并在路由中保留该状态,并在resetController
挂钩期间将其注入控制器。
或者,如果你不想那么喜欢并且你不关心向前兼容性,那么只需要一个存储状态的全局Session
对象。这就是我目前的做法,它的工作原理很好。 (虽然我们可能会远离它。)
TL; DR:不,我认为你没有将模型用于其预期目的。