将数组传递给linkTo助手

时间:2013-11-17 22:16:13

标签: ember.js

我想创建一个需要生成动态链接的组件。我尝试将链接数据作为数组传递,但这不起作用。

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}}

如何从变量生成完全动态的链接?

3 个答案:

答案 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)

Ember 1.13.x

链接帮助程序为您创建的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",除非您将链接文本作为数组中的第一个参数包含在内。

Ember≤1.12.x

虽然尚未完成,但您可以手动公开LinkView组件,该组件相当于新的LinkComponent。

App.XLinkToComponent = Ember.LinkView.extend();

然后使用它:

{{#x-link-to params=link}}
  {{title}}
{{/x-link-to}}

使用unboundhasBlock="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}}

我希望它有所帮助