2013-08-25 35 views
0

我想多次同時顯示某個控制器/視圖對。問題在於路線在當前控制器上更改模型,而不是創建新模型。強制路由到instantiante新的控制器/視圖對而不是更改模型

是否可以強制路線實例化新控制器?我試着在Ember.Route中調用回調函數和鉤子,但是我找不到任何方式使它像這樣行爲。

+0

你的模板是怎樣的?你是否也知道'{{#each}}'輔助函數或'ArrayController'的'itemController'選項的存在? – intuitivepixel

+0

我只是首先嚐試了一個原型,所以我仍然可以以任何我想要的方式塑造模板。我從小提琴開始(http://jsfiddle.net/6WV2U/1/),但一直困在這個問題上。 – Rengers

回答

1

如果您想要同時顯示多個模型,它似乎具有指向單個模型的路線,這些模型的變化無法很好地映射到您正在嘗試執行的操作。除非您使用嵌套路由,否則路由器並不旨在向顯示器添加其他視圖。您可以嘗試覆蓋路線中的renderTemplate hook,並使用render()指定使用哪個控制器,但這並不能幫助您同時顯示多個控制器/視圖對。

相反,我會嘗試使用其中一種方式來指定自定義控制器。當您收集要顯示的東西時,最簡單的方法是在模板中使用#each helper

{{#each product in products itemController='myControllerName'}} 

如果你想指定一個自定義視圖類,你也可以這樣做。

{{#each product in products itemController='myControllerName' itemViewClass='App.MyView'}} 

取決於你正在試圖做的,另一種方法來獲得該得到一個新的實例每次都是通過創建組件上下文是什麼。儘管如此,這更加重要,而且您可能需要重構一些代碼,將控制器邏輯移入組件。

+0

謝謝。我懷疑路由器不是爲此設計的。使用每個組件或許是當時的方法。不過,我希望網址指向上次查看的模型。基本上我想創建的是一個接口,其中一個新的路徑視圖在前一個視圖中部分「滑動」。就像在Spotify網絡播放器中一樣:http://i.stack.imgur.com/5FaWt.jpg將動畫轉換爲http://i.stack.imgur.com/YDnU9.jpg。我懷疑我需要手動更新URL,但是這對路由器來說可能嗎? – Rengers

+1

我不使用spotify,所以我不能肯定地說,但從你的截圖看來,你可以使用上面的##itemController'參數讓你的第一張截圖顯示所有的藝術家。但是,然後添加一個嵌套路線和一個動態片段,其中包含您放大的藝術家的ID以獲取第二張屏幕截圖。當您單擊列表中的藝術家時,轉換到此新路線。您可以在選定的模型上使用觀察者來進行UI過渡,如果有意義,可以使用嵌套模板的「{{outlet}}」。 –

+0

這將適用於概覽頁面+藝術家詳細信息頁面。但是從「藝術家」頁面,您可以點擊進入其他「藝術家」頁面。然後這些將彼此重疊。這些URL只是/:artist_id,沒有任何嵌套。問題是當我想轉換到另一個藝術家時,它不會創建新的控制器,我可以在其上創建新的控制器,而只是更改最頂級藝術家控制器上的藝術家。也許我應該放棄這個路由器,但用戶應該仍然可以使用/:artist_id URL轉到頁面,只有這樣它纔不會顯示任何分層。 – Rengers

相關問題