如何在淘汰赛的for循环中获得另一个for循环

时间:2014-05-07 10:13:37

标签: knockout.js knockout-2.0

我将json数据作为输出和敲除中的绑定。

Json数据

{
"frequency": [
    {
        "freqid": "2",
        "freqname": "Monthly",
        "date": [
            "1",
            "7",
            "10",
            "14",
            "20",
            "21",
            "28"
        ],

        "ny": "6.0",
        "ty": "0"
    },
    {
        "freqid": "3",
        "freqname": "Quarterly",
        "date": [
            "1",
            "7",
            "10",
            "14",
            "20",
            "21",
            "28"
        ],

        "ny": "4.0",
        "ty": "0"
    }
]

}

这是有效的json,我在我的html中循环使用knockout绑定并显示这样的数据。

<div data-bind="foreach: FreqList">
                <input type="hidden"  data-bind="attr: { id: 'hid_fr_' + freqid(), name: 'hid_freq_' + freqid()  } " >
</div>   

这里工作正常。问题是我希望有一个频率循环的日期循环,并希望通过#分隔日期数据,就像第一个循环值一样。

<input id="hid_fr_2" name="hid_fr_2" value="1#7#10#14#20#21#28" />

如何使用敲除循环实现此目的。请告诉我。

1 个答案:

答案 0 :(得分:3)

实现这一目标的最佳选择是使用javascript函数填充输入的value属性。即。

<div data-bind="foreach: FreqList">
    <input type="hidden" data-bind="attr: { id: 'hid_fr_' + freqid(), name:'hid_freq_' + freqid(), value: createDateValue(date) }">
</div>

然后在Javascript中你需要的东西是:

function createDateValue(dates) {
   return dates.join("#");
}

另请注意,在您的代码中,'freqid()'不起作用,因为该值不是可观察的,它应该由'freqid'代替。

希望这有助于指明你正确的方向。