【问题标题】:Knockout array of arrays敲除数组
【发布时间】:2012-10-05 19:35:50
【问题描述】:

传入的数据是这样的[[1,2,3],[4,5,6]],有时是这样的[[1,2],[4,5]]。这是 HTML。

<button data-bind="click: refreshJSON">Test</button>
<table>
    <tbody data-bind="foreach: array">
        <tr data-bind="foreach: subarray">
            <td data-bind="text: $data"></td>
        </tr>
    </tbody>
</table>

<script type="text/javascript">


    var ViewModel = {

        tableModel : ko.observableArray([[1,2,3],[4,5,6]]),

        refreshJSON : function(){
            this.tableModel([[1,2],[4,5]]);
        }

    };

    ko.applyBindings(ViewModel);

</script>

我猜我必须在每个子数组上使用 ko.observableArray(),但我不清楚如何执行此操作,或者如何在 HTML 中执行 data-binds

【问题讨论】:

    标签: knockout.js


    【解决方案1】:

    更新:删除了 observableArray 位中的 observableArray。显然这行不通。只需绑定您的外部集合。

    绑定部分相当简单:

    <div data-bind="foreach: tableModel">
        <div data-bind="foreach: $data">
            <span data-bind="text: $data"></span>
        </div>
    </div>
    

    【讨论】:

    • 无需单独添加项目,直接设置tableModel即可。但无论如何,只需要更正绑定即可。
    • 目前,Knockout 在observableArray 内的observableArray 中效果不佳,请列出此内容。就像 Jeff 说的,你只需要外部 observableArray,只需将其设置为 outerArray。看到这个issue
    • @JeffMercado:我没试过,但是如果你在 observableArray 中有一个数组,它会看到内部数组的删除和添加吗?我会假设不会。但我猜(根据 Michael 的说法)无论如何在 observableArray 中有一个 observableArray 是行不通的。
    • 为了能够看到任何对象的任何变化,你必须把它放在一个 observable 中。如果内部数组不是可观察的,您将看不到对它们进行的更改。然而,由于外部数组是可观察的,你会看到它的变化。是的,你可以在另一个数组中有一个可观察的数组,只是在这种情况下,它可能不需要。
    猜你喜欢
    • 2018-01-18
    • 2013-07-17
    • 1970-01-01
    • 1970-01-01
    • 2012-12-14
    • 2016-04-18
    • 1970-01-01
    • 1970-01-01
    • 2014-02-23
    相关资源
    最近更新 更多