2013-01-14 121 views
2

我試圖將我的應用遷移到新的emberjs路由API。Emberjs新的路由和查詢字符串或自定義路由匹配器

使用舊路由器我有一些解決方法,爲由ID保存的對象和通過一組參數描述的新對象提供類似的URI。這是爲了在用戶之間交換鏈接到對象的能力而沒有永久保存它。這是從我的應用的兩種簡化有效的途徑:

/objects/12     // fetch object by id (/objects/:object_id) 
/objects/<serialized params> // build new object from params (/objects/:params) 

此路線的兩個類似於路由器,因爲它們都具有動態部分和靜態部分是相等的。所以我寫了自定義RouteMatcher以拾取正確的路線。缺乏查詢字符串解析迫使我做這個快速和半解法的解決方案,也有關於github上的這個功能的ancient ticket

隨着新的路由器匹配已被提取到單獨的包(路由識別器),所以我不能做的伎倆(或它將充滿黑客和注入)。

我可以看到我已經從這些選項中進行選擇:

  • 完全重寫我的URI和獨立的所有交叉路線
  • 重寫的URI,但試圖實現查詢字符串分析器新Ember.Router
  • 將所有邏輯成一條路由並重新實現只序列化/反序列化方法(髒東西)

二的解決方案似乎更乾淨。

什麼是最好的非複雜的決定?我應該嘗試尋找另一種方式嗎?

+0

覆蓋路線的模型方法並沒有訣竅? – zaplitny

+0

這是選項#3。當然,它會做,但休息部分路線是略有不同的保存和新的對象,所以邏輯會搞砸。 – konung

回答

5

當前路由器不支持查詢字符串參數。

我們正在跟蹤這個錯誤https://github.com/emberjs/ember.js/issues/1773。你可能想要關注它。

與此同時,您最好的選擇可能是使用動態段並手動序列化(使用serialize鉤子)和反序列化(使用model鉤子)。

+0

謝謝你的回覆。我會嘗試使用這個解決方案。看來我需要簡化所有路線的邏輯。還有可能將靜態路由放在與動態相同的級別上? – konung

+0

您可以將靜態和動態路由置於同一級別。如果靜態路由和動態路由都匹配,則靜態路由將獲勝。這樣'/ posts/new'勝過'/ posts /:post_id'。 –

+0

好的。繼續調查。 – konung