Javascript 在余烬中保持多个状态

Javascript 在余烬中保持多个状态,javascript,url-routing,ember.js,Javascript,Url Routing,Ember.js,考虑使用Ember编写的ftp浏览器应用程序。它可能有一个层次结构的树状视图和一个当前所选文件的列表视图。并将当前选择存储在URL中,如下所示: baseUrl/#路径 e、 g www.emberftp.com/#stuff/docs/programming 没那么难 然而!现在考虑将此应用程序扩展为两个浏览器视图,类似Windows命令。其中一个视图当前正在浏览/stuff/docs/programming,另一个视图是/backup/images 显然,这在某种程度上需要多个出口,但URL

考虑使用Ember编写的ftp浏览器应用程序。它可能有一个层次结构的树状视图和一个当前所选文件的列表视图。并将当前选择存储在URL中,如下所示:

baseUrl/#路径

e、 g

www.emberftp.com/#stuff/docs/programming

没那么难

然而!现在考虑将此应用程序扩展为两个浏览器视图,类似Windows命令。其中一个视图当前正在浏览/stuff/docs/programming,另一个视图是/backup/images

显然,这在某种程度上需要多个出口,但URL会发生什么变化

首先,这是否得到支持?如果是,应该如何设置路由和序列化/反序列化?那么URL实际上是什么样子的呢

baseUrl/#?浏览器1=/stuff/docs/programming&browser2=/backup/images


也许?

余烬路由器将更新浏览器的URL以反映当前应用程序状态。这样做是为了用户可以通过URL返回或共享其当前状态。需要注意的是,路由器在给定时间只能处于一种状态

路由器就是使用序列化和反序列化来重新创建它的状态。这基本上是将当前应用程序状态转换为可共享URL的想法,反之亦然。要解决您发布的问题,您可能需要一个模型,让我们称之为
窗口
,它有许多
浏览器
。然后,当您通过URL加载窗口时,您可以轻松地重建所有ftp浏览器。我认为处理一个模型会使序列化/反序列化过程更容易概念化

不管怎样,下面是你的模特们的样子

App.Window.create({
  id: 1,
  browsers: [1, 2]
});

App.Browser.create({
  id: 1,
  path: "/stuff/docs/programming"
});

App.Browser.create({
  id: 2,
  path: "/backup/images"
})

您的路由器只需知道如何反序列化“/windows/:window\u id”

Ember路由器将更新浏览器的URL以反映当前应用程序状态。这样做是为了用户可以通过URL返回或共享其当前状态。需要注意的是,路由器在给定时间只能处于一种状态

路由器就是使用序列化和反序列化来重新创建它的状态。这基本上是将当前应用程序状态转换为可共享URL的想法,反之亦然。要解决您发布的问题,您可能需要一个模型,让我们称之为
窗口
,它有许多
浏览器
。然后,当您通过URL加载窗口时,您可以轻松地重建所有ftp浏览器。我认为处理一个模型会使序列化/反序列化过程更容易概念化

不管怎样,下面是你的模特们的样子

App.Window.create({
  id: 1,
  browsers: [1, 2]
});

App.Browser.create({
  id: 1,
  path: "/stuff/docs/programming"
});

App.Browser.create({
  id: 2,
  path: "/backup/images"
})

您的路由器只需知道如何反序列化“/windows/:window_id”。

路径是指向任何ftp服务器上任何位置的任意路径。这不可能有一个预定义的状态。在某种程度上,两个路径都必须序列化到URL,在反序列化哪个路径属于哪个浏览器时,这一点很明显。问题是,当URL只影响状态树中的一条路径时,很明显如何安排URL,但如果它需要影响多条路径呢?我们需要的是以一种对Ember有意义的方式描述URL上的层次数据。我想人们总是可以用base64编码json结构,但是……没错。因此,找到一种方法来序列化
窗口
对象,这样就可以通过输入URL来重新创建它。这可以是base64或url编码的路径列表。整个想法是一个URL可以用来重新创建/创建对象和状态。路径是指向任何ftp服务器上任何位置的任意路径。这不可能有一个预定义的状态。在某种程度上,两个路径都必须序列化到URL,在反序列化哪个路径属于哪个浏览器时,这一点很明显。问题是,当URL只影响状态树中的一条路径时,很明显如何安排URL,但如果它需要影响多条路径呢?我们需要的是以一种对Ember有意义的方式描述URL上的层次数据。我想人们总是可以用base64编码json结构,但是……没错。因此,找到一种方法来序列化
窗口
对象,这样就可以通过输入URL来重新创建它。这可以是base64或url编码的路径列表。整个想法是,URL可用于重新创建/创建对象和状态。