Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/445.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
Javascript 使用foreach删除渲染复选框_Javascript_Jquery_Knockout.js - Fatal编程技术网

Javascript 使用foreach删除渲染复选框

Javascript 使用foreach删除渲染复选框,javascript,jquery,knockout.js,Javascript,Jquery,Knockout.js,这是我第一次参加淘汰赛。我找不到如何使用foreach呈现复选框列表 我尝试的是: <div class="col-sm-12" data-bind="foreach: placeCategories"> <label class="col-sm-6" data-bind="text: name"> <input type="checkbox" data-bind="value: val"> </label> &l

这是我第一次参加
淘汰赛
。我找不到如何使用
foreach
呈现复选框列表

我尝试的是:

<div class="col-sm-12" data-bind="foreach: placeCategories">
    <label class="col-sm-6" data-bind="text: name">
         <input type="checkbox" data-bind="value: val">
    </label>
</div>

但我只知道名字,没有复选框。标签内部html可能被覆盖。但是如何同时显示复选框和文本?

来自:

text
绑定使用参数值将内容设置为文本节点。以前的任何内容都将被覆盖

因此,您需要在不同的元素上使用
文本
绑定,例如在
span

<div class="col-sm-12" data-bind="foreach: placeCategories">
    <label class="col-sm-6"> 
         <span data-bind="text: name"></span>
         <input type="checkbox" data-bind="value: val">
    </label>
</div>

也可以使用无容器语法:

<div class="col-sm-12" data-bind="foreach: placeCategories">
    <label class="col-sm-6"> 
         <!--ko text: name--><!--/ko-->
         <input type="checkbox" data-bind="value: val">
    </label>
</div>

是的,您需要使用ko注释标记或多个子元素(例如span),以避免绑定相互覆盖

为了好玩,您可以覆盖Knockout
文本
绑定以允许这种行为。下面的代码将测试元素的
数据绑定
属性的内容,如果找到任何属性,则在保持其他绑定的同时,在元素的开头插入文本节点

var-app={
地点类别:[
{name:ko.observable('A'),val:ko.observable(false)},
{name:ko.observable('B'),val:ko.observable(false)},
{name:ko.observable('C'),val:ko.observable(false)}
]
};
ko.bindingHandlers.text.update=函数(元素,valueAccessor){
var hasBindings=element.innerHTML.match('data-bind'),
value=ko.utils.unwrapobbservable(valueAccessor());
if(hasBindings){
if(element.firstChild.nodeType!==3)
element.insertBefore(document.createTextNode(“”),element.firstChild);
element.firstChild.nodeValue=值;
}否则
element.nodeValue=值;
};
ko.应用绑定(app)


感谢您对ko comment的帮助。很高兴知道我可以覆盖绑定,但这对于我的特殊任务来说太复杂了。@Edgar,NP我知道,这只是我想调查的一个好奇:)