2012-10-08 139 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