2

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

baseUrl/#路径

例如

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

没那么难。

然而!现在考虑将此应用程序扩展为具有两个类似于 Windows Commander 的浏览器视图。一个视图当前正在浏览 /stuff/docs/programming 和另一个 /backup/images。

显然,这需要在某个级别上有多个出口,但是 URL 会发生什么?

首先,这完全支持吗?如果是,应该如何设置路由和序列化/反序列化?该 URL 实际是什么样的?

baseUrl/#?browser1=/stuff/docs/programming&browser2=/backup/images

也许?

4

1 回答 1

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”。

于 2012-10-09T22:03:55.800 回答