Knockout.js在foreach绑定中使用循环变量

时间:2015-09-08 08:05:51

标签: javascript knockout.js

我是Knockout.js的新手,我认为只需要找到正确的语法。

我想使用foreach绑定的循环变量来创建组件。像这样:

<ul data-bind="foreach: packages">
    <li>

      <my-widget params='package'></my-widget>

      <!-- I have tried but dont' work:
      <my-widget params='this'></my-widget>
      <my-widget params='$parent'></my-widget>
      <my-widget params='$parenteContext'></my-widget>
      -->

    </li>
</ul>

有简单的方法吗? with绑定可以有用吗?

编辑:

这是一个简单的jsfiddle来演示它: http://jsfiddle.net/n194o9dp/3/

我希望看到重复的ul列表:

  • a a
  • b b
  • c c

2 个答案:

答案 0 :(得分:1)

我认为您正在寻找包含正在迭代的当前数据项$data

可以在docs for bindingContext properties

中找到更多信息

编辑:所以你的params混乱了。就像绑定一样,你需要传递它property:value - 所以如果你想传递它你可以做的整个外部对象:

<my-widget params='data:$data'></my-widget>

data

唯一的区别是您在小部件中访问它的方式。此外,<my-widget params='foo:$data'></my-widget> 表示绑定上下文,用于访问您需要使用属性$data的实际数据,这会很快造成混淆。总而言之,如果您这样做,它将起作用:

data

然后在小部件内:

<my-widget params='data:$data'></my-widget>

http://jsfiddle.net/n194o9dp/5/

在我看来,更好的选择是将您实际需要的内容传递给您的小部件:

 ....
 viewModel: function(params) {
    this.name = params.data.name
 },
 ....

直接访问它:

<my-widget params='name:name'></my-widget>

答案 1 :(得分:0)

您可以使用组件绑定

<ul data-bind="foreach: {data: packages, as:package}">
    <li>

    <div data-bind='component: {
        name: "my-widget",
        params: { package: package }
    }'></div>

    </li>
</ul>

有关组件绑定的更多信息是here