2013-04-14 65 views
0

我想有一個路由子狀態不會顯示在URL中,但仍然可以利用具有可以定義renderTemplate,model,setupController等鉤子的路由類。這是可能的v2路由器?我正在使用Ember發佈候選版本2.當使用Ember Router v2時,是否可以隱藏子網顯示在URL中?

下面是一個示例。

假設我有路線:

/exercise/:exercise_id 
/exercise/:exercise_id/correct 
/exercise/:exercise_id/incorrect 

我想所有的這些在URL以顯示:

/exercise/:exercise_id 

正如我不希望學生只需要直接鍵入在/correct到ULR的末尾,並得到正確的答案。雖然我有辦法阻止它的工作,但完整的路線仍然顯示在URL中。從學生的角度來看,我只希望他們考慮國家/exercise/:exercise_id

當然,我可以在某些控制器變量中正確存儲狀態正確與不正確,但是隨後我放棄了讓路線類ExerciseCorrectRoute和ExerciseIncorrectRoute(我希望具有不同行爲)的便利性,因此掛鉤與renderTemplate和setupController,都很好地在不同的地方清晰地定義。

想法?

凱文

UPDATE:

我與丹格布哈特的建議去了,因爲我喜歡讓事情框架的考慮設計案例中儘可能多地,因爲這似乎減少了給定的餘燼仍在發展頭痛。此外,我沒有機會嘗試在Dream的黑客攻擊中。

儘管我仍然認爲如果路由器添加了一個功能來屏蔽URL中的子狀態,它將會很好。

回答

1

每條路由都必須與Ember當前路由器的URL關聯。

我建議您在exercise模板中使用條件來根據練習的狀態調用相應的{{render}},而不是使用多條路線。通過這種方式,您仍然可以爲每個狀態維護單獨的模板和控制器。

0

你可以參考我的回答Ember.js - Prevent re-render when switching route

重新打開您正在使用的location API並將window.suppressUpdateURL設置爲true,如果您想手動處理該狀態。

Ember.HistoryLocation:

​​

Ember.HashLocation:

Ember.HashLocation.reopen({ 
    onUpdateURL: function(callback) { 
    var self = this; 
    var guid = Ember.guidFor(this); 

    Ember.$(window).bind('hashchange.ember-location-'+guid, function() { 
     if(window.suppressUpdateURL)return; 
     Ember.run(function() { 
     var path = location.hash.substr(1); 
     if (get(self, 'lastSetURL') === path) { return; } 

     set(self, 'lastSetURL', null); 

     callback(path); 
     }); 
    }); 
    } 
}); 
相關問題