【问题标题】:Nested foreach in knockout.js在 knockout.js 中嵌套 foreach
【发布时间】:2012-06-10 22:56:35
【问题描述】:

我似乎无法让嵌套的 foreach 工作。

JS代码是:

$(document).ready(function() {

    function chartValueViewModel(date, price) {
        this.date = date;
        this.price = price;
    }

    function chartViewModel(id, name, lineType, values) {
        this.id = id;
        this.name = name;
        this.lineType = lineType;
        this.values = ko.observableArray(values);
    }

    function liveCurveViewModel() {

        this.chartsData = ko.observableArray([]);
        var chartsData = this.chartsData;

        this.init = function() {

            var mappedCharts = $.map(chartValues,
            function(chart) {
                var mappedValues = $.map(chart.chartValues, function(value) {
                    return new chartValueViewModel(value.dateTime, value.price);
                })
                return new chartViewModel(chart.id, chart.name, chart.liveCurveTypeId, mappedValues);
            });

            chartsData(mappedCharts);
        };
    }

    var vm = new liveCurveViewModel();
    vm.init();
    ko.applyBindings(vm);

});

HTML 是:

<ul data-bind="foreach: chartsData ">
    <li data-bind="text: name">
        <ul data-bind="foreach: values">
           <li data-bind="text: price">
           </li>
        </ul>
    </li>
</ul>

外部循环正确呈现,但我从内部循环中什么也得不到,甚至没有错误消息。我已经检查并填充了 chartViewModel 上的值字段。

【问题讨论】:

    标签: javascript foreach knockout.js


    【解决方案1】:

    您在外部li 上的text 绑定正在覆盖其中的内容,因此它正在吹走您的内部foreachtext 绑定设置了元素的 innerText/textContent,它会覆盖当前的子元素。

    你会想做这样的事情:

    <ul data-bind="foreach: chartsData ">
        <li>
            <span data-bind="text: name"></span>
            <ul data-bind="foreach: values">
               <li data-bind="text: price">
               </li>
            </ul>
        </li>
    </ul>
    

    【讨论】:

    • @RP Niemeyer 你应该解释为什么外部的 li 文本绑定会覆盖内部的。如果可能的话,详细解释这种行为。谢谢
    • @Thomas - 添加了一个额外的句子来说明 text 绑定设置了 innertText/textContent。希望有帮助!
    猜你喜欢
    • 2013-03-23
    • 1970-01-01
    • 1970-01-01
    • 2013-09-04
    • 2012-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多