2013-02-02 39 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

相关问题