Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Knockout.js 敲除3级optgroup绑定_Knockout.js_Html Select - Fatal编程技术网

Knockout.js 敲除3级optgroup绑定

Knockout.js 敲除3级optgroup绑定,knockout.js,html-select,Knockout.js,Html Select,我试图绑定一个选择/列表框,其中有3个级别的数据,我希望我的输出如下所示 <select> <optgroup label="Root 1"> <optgroup label="Group 1"> <option>Option 1</option> <option>Option 2</option> <opti

我试图绑定一个选择/列表框,其中有3个级别的数据,我希望我的输出如下所示

<select>
    <optgroup label="Root 1">
        <optgroup label="Group 1"> 
            <option>Option 1</option>
            <option>Option 2</option>
            <option>Option 3</option>
        </optgroup>
    </optgroup>
    <optgroup label="Root 2">
        <optgroup label="Group 2">
            <option>Option A</option>
            <option>Option B</option>
            <option>Option C</option>
        </optgroup>
    </optgroup>
</select>
这就是我试图绑定的方式

<div id="termdata">
    <select id="termsList" name="Term" data-bind="foreach: allterms">
        <optgroup data-bind="attr: { label: name}, foreach: termRoot">
            <optgroup data-bind="attr: { label: name},foreach: termGroup">
                <option data-bind="text: name"></option>
            </optgroup>                
        </optgroup>
    </select>
</div>

    var termData = [{
        "name": "Root 1", "termRoot": [{
            "name": "Group 1", "termGroup": [{
                "terms": [{
                    "name": "option 1"
                }, { "name": "option 2" }, { "name": "option 3" }]
            }]
        }]
    }, {
        "name": "Root 2", "termRoot": [{
            "name": "Group 2", "termGroup": [{
                "terms": [{
                    "name": "option A"
                }, { "name": "option B" }, { "name": "option C" }]
            }]
        }]
    }];

    var TermViewModel = function () {
        var self = this;
        self.allterms = ko.observableArray(termData);
    }

    ko.applyBindings(new TermViewModel(), document.querySelector('#termdata'));
我收到以下错误

消息:无法处理绑定foreach:function{returnterms} 消息:未定义术语


然而,在我看来,groupTerms上存在着无效的html循环语法,而且:嵌套的optgroups理论上是错误的,在呈现dom时会被展平。这一条应该有效:

<div id="termdata">
    <select id="termsList" name="Term" data-bind="foreach: allterms">
      <optgroup data-bind="attr: {label: name}"></optgroup>
      <!-- ko foreach: { data: termRoot, as: 'root' } -->
        <optgroup data-bind="attr: {label: root.name},
          foreach: { data: root.termGroup[0].terms, as: 'group' }">
          <option data-bind="text: group.name">ds</option>
        </optgroup>
      <!-- /ko -->
    </select>
</div>

请注意,termGroup是一个数组,所以理论上您也应该循环它。不过,我刚刚使用了第一个索引-root.termGroup[0].terms,而您正试图在语法中显示termGroup.name,因为-正如我所说-termGroup是一个数组。您能显示您的javascript吗?谢谢您的回复,我已经更新了这个问题。html似乎不支持嵌套超过1级的选项组。谢谢,是的,我知道,但我没有其他的解决方案,如果你看到我问题中的第一个例子嵌套optgroup工作,唯一的问题是淘汰不支持Hanks,我花了一整天的时间来实现它,但无法实现,我不知道我进一步节省了多少,