在淘汰赛中执行嵌套的foreach循环

时间:2013-02-22 22:22:38

标签: javascript jquery knockout.js

我以前从未在淘汰赛中这样做过,所以我肯定错了。

我在这里有一个显示问题的jsfiddle:http://jsfiddle.net/pdavis68/xebq7/

这是相关的HTML:

    <!-- ko foreach: Parameters -->
        <select data-bind="attr: { id: Name }">
            <!-- ko foreach: $parent.ValidValues -->
            <option data-bind="value: Value, text: Label"></option>
            <!-- /ko -->
        </select>
    <!-- /ko -->

和相关的Javascript:

var ViewModel = function () {
    var self = this;
    self.Parameters = ko.observableArray();
}
var currentItem;

$(document).ready() {
    currentItem = new ViewModel();       
    ko.applyBindings(currentItem);

    currentItem.Parameters.push(
        [{"Name":"WarehouseCode", "ValidValues":
          [{"Label":"Warehouse 1-- (01)","Value":"01"},
           {"Label":"Warehouse 2 -- (02)","Value":"02"}]}]);
}

我的目标当然是使用ValidValues来填充<option>中的<select>标记,正如您从jsFiddle中看到的那样,这种情况并未发生。

如何更正我的HTML?

感谢。

1 个答案:

答案 0 :(得分:0)

你有几个问题:

  1. 您的document.ready(...)语法错误。您希望该块看起来像:

    $(document).ready(function () { ... }); // <-- note the "function"
    
  2. 您正在将数组推入可观察的项目数组中。您确实希望使用新值更新可观察数组:

    currentItem.Parameters([{
        "Name": "WarehouseCode",
        "ValidValues": [{
            "Label": "Warehouse 1-- (01)",
            "Value": "01"
        }, {
            "Label": "Warehouse 2 -- (02)",
            "Value": "02"
        }]
    }]);
    
  3. 你在小提琴中既没有包括KnockoutJS也没有jQuery。

  4. 更新示例: http://jsfiddle.net/xebq7/1/