我有一個子菜單,只有在主菜單中的菜單項被選中時纔會出現。我想要做的是保存子菜單的狀態,以便當用戶選擇子菜單中的某些內容,然後在主菜單中導航時,該子菜單項在返回到子菜單時仍然應該被選中。但是,我不知道該怎麼去做。有任何想法嗎?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');});
看起來不錯,在你的jsfiddle。但是,由於某些原因,完全相同的代碼在本地不起作用。作爲參數傳遞給Route的'willTransition'動作的'transition'對象沒有handlerInfos屬性。所以我得到一個「不能調用方法」任何「未定義」?我有雙重檢查我的圖書館版本。我使用的是jquery 2.0.3,handlebars 1.0.0和ember 1.0.0-4-g111e097(這是目前最新的)。有任何想法嗎? – martinp999
我也發現'transition.router.currentHandlerInfos'仍然包含了處理程序(例如''application,a,g]',當我從'/ a/g'導航後調用'willTransition'時,到'/ b'。所以,我不能使用該屬性來決定是否應該設置'savedPath'。 – martinp999