通过相同的数组循环两次?

时间:2013-02-20 18:56:14

标签: knockout.js

我有这样的viewmodel,

        function viewModel() {
            this.Items = ['A', 'B', 'C'];
        }

        ko.applyBindings(new viewModel());

我想打印出这样的东西,

    <div data-bind="foreach: {data: Items, as: 'item1' }">
        <span data-bind="text: item1"></span>
        <div data-bind="foreach: {data: Items, as: 'item2' }">
            <span data-bind="text: item2"></span>
        </div>          
    </div>

上面没有用,我得到一个错误,说明项目没有定义(在我第二次尝试使用它的行)。

所以,我想我会尝试这个,

        function viewModel() {
            this.Items1 = ['A', 'B', 'C'];
            this.Items2 = ['A', 'B', 'C'];
        }

        ko.applyBindings(new viewModel());

    <div data-bind="foreach: {data: Items1, as: 'item1' }">
        <span data-bind="text: item1"></span>
        <div data-bind="foreach: {data: Items2, as: 'item2' }">
            <span data-bind="text: item2"></span>
        </div>          
    </div>

我收到语法错误。我做错了什么?

感谢。

2 个答案:

答案 0 :(得分:1)

您需要更改内循环的上下文: (例子是基于你的原意)

<div data-bind="foreach: {data: Items, as: 'item1' }">
    <span data-bind="text: item1"></span>
    <div data-bind="foreach: {data: $parent.Items, as: 'item2' }">
        <span data-bind="text: item2"></span>
    </div>          
</div>

答案 1 :(得分:0)

如果您要完成的只是吐出数组中的每个值,只需将您的标记更改为:

<div data-bind="foreach: {data: Items, as: 'item1' }">
    <span data-bind="text: item1"></span>        
</div>

这是jsFiddle:http://jsfiddle.net/dymAQ/1/