2013-10-17 62 views
0

我有一個子菜單,只有在主菜單中的菜單項被選中時纔會出現。我想要做的是保存子菜單的狀態,以便當用戶選擇子菜單中的某些內容,然後在主菜單中導航時,該子菜單項在返回到子菜單時仍然應該被選中。但是,我不知道該怎麼去做。有任何想法嗎?Ember - 保存子菜單狀態

http://jsfiddle.net/martinp999/Ce5j8/2/

<script type="text/x-handlebars"> 
    <div class="navbar"> 
     <div class="navbar-inner"> 
     <a class="brand" href="#/a/f">Main Menu</a> 
     <ul class="nav"> 
      <li>{{#link-to 'a'}}A{{/link-to}}</li> 
      <li>{{#link-to 'b'}}B{{/link-to}}</li> 
      <li>{{#link-to 'c'}}C{{/link-to}}</li> 
     </ul>   
     </div> 
    </div> 
    {{outlet}} 
</script> 

<script type="text/x-handlebars" id="a"> 
    <div class="navbar"> 
     <div class="navbar-inner"> 
     <a class="brand" href="#/a/f">Sub Menu A</a> 
     <ul class="nav"> 
      <li>{{#link-to 'f'}}F{{/link-to}}</li> 
      <li>{{#link-to 'g'}}G{{/link-to}}</li> 
      <li>{{#link-to 'h'}}H{{/link-to}}</li> 
     </ul>   
     </div> 
    </div> 
    {{outlet}} 
</script> 

<script type="text/x-handlebars" id="b"> 
B 
</script> 

<script type="text/x-handlebars" id="c"> 
C 
</script> 

<script type="text/x-handlebars" id="f"> 
F 
</script> 

<script type="text/x-handlebars" id="g"> 
G 
</script> 

<script type="text/x-handlebars" id="h"> 
H 
</script> 

App.Router.map(function() { 
this.resource('a', function() { 
    this.resource('f'); 
    this.resource('g'); 
    this.resource('h'); 
}); 
this.resource('b'); 
this.resource('c');}); 

回答

1

當從A路線轉變,你可以檢查transition對象,看看你要去哪裏。您可以隱藏您要前往的位置(如果它是A的子路線),然後在AIndexRouteredirect掛鉤中再次使用它。

退房這個更新的提琴:http://jsfiddle.net/ahaurw01/Ce5j8/3/

+0

看起來不錯,在你的jsfiddle。但是,由於某些原因,完全相同的代碼在本地不起作用。作爲參數傳遞給Route的'willTransition'動作的'transition'對象沒有handlerInfos屬性。所以我得到一個「不能調用方法」任何「未定義」?我有雙重檢查我的圖書館版本。我使用的是jquery 2.0.3,handlebars 1.0.0和ember 1.0.0-4-g111e097(這是目前最新的)。有任何想法嗎? – martinp999

+0

我也發現'transition.router.currentHandlerInfos'仍然包含了處理程序(例如''application,a,g]',當我從'/ a/g'導航後調用'willTransition'時,到'/ b'。所以,我不能使用該屬性來決定是否應該設置'savedPath'。 – martinp999

0

想通了。我認爲ember-latest.js指出最新的產品發佈,它實際上指向beta - canary的測試版。轉換對象在prod或beta中不包含handlerInfos對象,僅在canary中。

+0

[繼家庭失明之後](https://github.com/emberjs/ember.js/issues/3632),我已經指出了更多信息。在更現實的情況下,我需要從轉換對象中獲取鏈接到幫助器的模型。它在transition.providedModels(doh!)中找到。作品一種享受。 – martinp999