【问题标题】:Maintain multiple states in ember在 ember 中维护多个状态
【发布时间】:2012-10-08 21:02:12
【问题描述】:

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

baseUrl/#path

例如

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

没那么难。

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

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

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

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

也许?

【问题讨论】:

    标签: javascript url-routing ember.js


    【解决方案1】:

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

    【讨论】:

    • 路径是到任何 ftp 服务器上任何位置的任意路径。不可能有一个预定义的状态。在某种程度上,两个路径都必须以一种在反序列化哪个路径属于哪个浏览器时显而易见的方式序列化到 URL。问题是,当 URL 只应该影响状态树中的单个路径时,如何安排 URL 是很明显的,但是如果它需要影响多个呢?人们需要的是一种对 Ember 有意义的方式来描述 URL 上的分层数据。我想人们总是可以用 base64 编码一个 json 结构,但是......
    • 对。所以找到一种方法来序列化window 对象,以便可以通过输入 URL 来重新创建它。这可以是 base64 或 url 编码路径列表。整个想法是一个 URL 可用于重新创建/创建对象和状态。
    猜你喜欢
    • 2021-02-24
    • 1970-01-01
    • 2020-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-06
    • 2016-07-14
    • 1970-01-01
    相关资源
    最近更新 更多