2013-02-02 41 views
2

如何動態地將路由名稱傳遞給{{linkTo}}?如何將模型路由名稱項傳遞給模板中的linkTo ember.js

例如,給出此代碼:

App.Router.map(function() { 
this.resource('anon', {path: '/main'}, 
function() { 
    this.route('home', {path:'/home'}); 
    this.route('about', { path: '/about' }); 
    this.route('contact', { path: '/contact' }); 
}); 
}); 

App.NavController = Ember.ArrayController.extend({ 
    selectedNav:'', 
    setNav:function(value){ 
    var nav = App.Nav.find(value); 
    var items = nav.get('navItems'); 
    this.set('content', items);  
    } 
}); 

這些模板:

<script type="text/x-handlebars" data-template-name="nav"> 
    <ul class="nav"> 
    {{#each in controller}} 
     {{ partial "basicNav"}} 
    {{/each}} 
    </ul> 
</script> 

<script type="text/x-handlebars" data-template-name="_basicNav"> 
    <li>{{#linkTo navItemPath}}{{navItemName}}{{/linkTo}}</li> 
</script> 

這些模型與以下燈具數據:

App.Nav = DS.Model.extend({ 
    navItems:DS.hasMany('App.NavItem'), 
    name:DS.attr('string') 
}); 

App.NavItem = DS.Model.extend({ 
    nav:DS.belongsTo('App.Nav'), 
    navItemName:DS.attr('string'), 
    navItemPath:DS.attr('string') 
}); 

App.Nav.FIXTURES = [ 
{ 
    id: 10, 
    name: 'Anon', 
    navItems: [100,200,300] 
} 
]; 

App.NavItem.FIXTURES = [ 
{ 
    id:100, 
    nav:10, 
    navItemName:'Home', 
    navItemPath:'anon.home' 
}, 
{ 
    id:200, 
    nav:10, 
    navItemName:'Contact', 
    navItemPath:'anon.contact' 
}, 
{ 
    id:300, 
    nav:10, 
    navItemName:'About', 
    navItemPath:'anon.about' 
} 
]; 

我如何通過navItemPath到{{linkTo}}助手?在此代碼段:

{{#linkTo navItemPath}}{{navItemName}}{{/linkTo}} 

燼抱怨說,它無法找到「navItemPath」的路線,就像它的字面尋找它。如果我更換與像一個有效的字面路線:

{{#linkTo 'anon.home'}}{{navItemName}}{{/linkTo}} 

燼將呈現linkTo與navItemName不如預期,所以我知道該控制器傳遞正確的數據,但當然,所有的路線都是愚蠢的。我錯過了明顯的東西嗎?

+0

將router.map添加到問題中。您需要在引號中使用路由器資源名稱,然後傳遞參數。像這樣''{{#linkTo「nameOfResource」objectWhichContainsRouteId}} {{navItemName}} {{/ linkTo}}' – Giedrius

+0

謝謝,@Giedrius。我更新了問題以包含我的路由器。我可以看到正確傳入的數據。例如,如果我將navItemName更改爲navItemPath,則會看到傳入的路由字符串。您知道{{linkTo}}是否必須傳遞字符串嗎?再次,我試圖從我的模型中傳遞一個字符串的ref,它的行爲就像它試圖從字面上讀取ref一樣。感謝您的反饋! – Ryanopolis

回答

1

你不能做到這一點與LinkTo幫手,你需要使用bindAttr

<a {{bindAttr href="navItemPath"}}>{{navItemName}}</a> 

確保撕心裂肺navItemPath的價值邏輯考慮到location API您的鏈接的HREF結合navItemPath

+0

謝謝,@ken,我最終走向了這個方向。 – Ryanopolis

相關問題