我想创建一个需要生成动态链接的组件。我尝试将链接数据作为数组传递,但这不起作用。
var user1 = get("store").find("user", 1);
var data = {link: ["users.show", user1], title: "User1"};
{{#link-to data.link}}{{data.title}}{{/link-to}}
这应该等于
{{#link-to "users.show" 1}}{{data.title}}{{/link-to}}
如何从变量生成完全动态的链接?
答案 0 :(得分:8)
您可以将params
参数指定为link-to
帮助器。与nickiaconis' answer回答类似,但只有默认的{{link-to}}
帮助:
{{#link-to params=data.link}}{{data.title}}{{/link-to}}
...将呈现如下内容:
<a href="/users/show/1">User1</a>
(用Ember 2.3.0测试)
答案 1 :(得分:3)
链接帮助程序为您创建的LinkComponent公开为-link-to。我在这里创建了一个使用它的例子:http://emberjs.jsbin.com/rinukefuqe/2/edit?html,js,output
{{#-link-to params=(unbound link) hasBlock="true"}}
{{title}}
{{/-link-to}}
params
属性是链接到帮助程序通常将您的位置参数捆绑到的属性,尽管您必须在此处使用未绑定的帮助程序,因为LinkComponent expects params to be an array而不是值绑定对象。此外,the determination of use as block or inline component is not built into components yet,因此您必须传递hasBlock="true"
,除非您将链接文本作为数组中的第一个参数包含在内。
虽然尚未完成,但您可以手动公开LinkView组件,该组件相当于新的LinkComponent。
App.XLinkToComponent = Ember.LinkView.extend();
然后使用它:
{{#x-link-to params=link}}
{{title}}
{{/x-link-to}}
使用unbound
和hasBlock="true"
不是必需的,因为LinkView的内部逻辑与LinkComponent不同。
答案 2 :(得分:0)
我认为传递数组是不可能的,但你可以直接传递每个参数,如下所示:
<强>路线强>
var user1 = this.store.find('user', 1);
var data = { data: { link: "users.show", model: user1, title: "User1" } };
return data;
<强>模板强>
{{#link-to data.link data.model.id}}{{data.title}}{{/link-to}}
我希望它有所帮助