2012-10-08 95 views
2

考虑使用Ember编写的ftp浏览器应用程序。它可能有层次结构的树形视图和当前选择的文件的列表视图。并存储当前选择的网址为:在余烬中维护多个状态

的baseUrl /#路径

例如

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

并不难。

但是!现在考虑扩展这个应用程序,使其具有两个类似Windows Commander的浏览器视图。这一观点目前正在浏览/ stuff/docs/programming和其他/备份/图像。

很明显,这需要多个网点在某个级别,但网址会发生什么变化?

首先,这是否全部支持?如果是这样,应该如何设置路由和序列化/反序列化?该网址实际上会是什么样子?

的baseUrl /#?browser1 = /材料/文档/编程& browser2 = /备份/图像

也许?

回答

0

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

路由器是关于使用序列化和反序列化来重新创建它的状态。这基本上是将当前应用程序状态转换为可共享的URL的概念,反之亦然。为了解决你发布的问题,你应该有一个模型,可以叫它window,它有很多browsers。然后,当您通过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”。

+0

路径是任意路径到任何FTP服务器上的任何位置。这是不可能有一个预定义的国家。在某些情况下,两个路径必须以反序列化哪条路径属于哪个浏览器的方式序列化到URL。 问题是,显而易见,如何安排一个URL,当它只影响状态树中的单个路径时,但如果它需要影响几个? 需要的是以一种对Ember有意义的方式来描述URL上的字形数据。我想总是可以base64编码一个json结构,但是... – jool

+0

没错。所以找到一种方法来序列化window对象,这样可以通过输入一个URL来重新创建它。这可能是base64或url编码的路径列表。整个想法是一个URL可以用来重新创建/创建一个对象和状态。 – Ryan