Javascript Knockout正在为单个foreach生成两个绑定

Javascript Knockout正在为单个foreach生成两个绑定,javascript,json,knockout.js,knockout-mapping-plugin,Javascript,Json,Knockout.js,Knockout Mapping Plugin,我面临着头痛的问题,这让我花了两天的时间来寻找解决办法。我希望有人能帮我。我使用knockout为HTML标记生成json数据绑定。但是,我无法更改元素的css,因为我意识到元素生成了两次并分配了相同的id <div id = 'divBinder' data-bind="foreach: Results" > <div id='rowStyle' class='eligibilitydivContentTableRow' >

我面临着头痛的问题,这让我花了两天的时间来寻找解决办法。我希望有人能帮我。我使用knockout为HTML标记生成json数据绑定。但是,我无法更改元素的css,因为我意识到元素生成了两次并分配了相同的id

<div id = 'divBinder' data-bind="foreach: Results" >        
            <div id='rowStyle' class='eligibilitydivContentTableRow'  >
            <div class='eligibilitydivContentLeftCell' style="float:left;"  data-bind=" text: RequirementDescription"></div>
            <div class='eligibilitydivContentMiddleCell' style="float:left;">
            <span class='spanClass'></span>
            <input class='inputRadio' type='radio'  value:'true' data-bind="attr: { checked: IsChecked,'name': $index() }" />
            <span class='spanClass'></span>
            </div>
            <div class='eligibilitydivContentRightCell' style="float:left;"><span class='spanClass'></span>
            <input class='inputRadio2' type='radio' value:'false'  data-bind="attr: { checked: IsChecked, 'name': $index(), onclick:'testFunction.apply(this);return true;'}"     />
                <span class='spanClass'></span>
            </div>
            </div>
            <div data-bind=" attr: {'id': getSuffixRowID($index())}" style="display:none;"  >
            <div style="float:left;">
                <textarea > </textarea>
            </div>
            <div>
                <input type='text' id='dateField' onfocus='showDate()' /></div>
        </div>
          </div>
这是我的装订

  viewModel = [];
     viewModel.Results = ko.mapping.fromJS(globalizedData.Results);


     ko.cleanNode(document.getElementById("parentDivElement"));
     ko.applyBindings(viewModel, document.getElementById("parentDivElement"));
请注意,RequirementDescription已正确绑定。唯一的问题是通过选中按钮时调用的testFunction设置css

function testFunction() {
        //    jQuery('#' + getSuffixRowID(this.attributes[6].nodeValue)).hide();
        var nodeId = this.attributes['name'].nodeValue;
        var stringValue = this.value;
        switch (stringValue) {
            case ('true'):
                viewModel.Results()[nodeId].IsCompleted(true);
                viewModel.Results()[nodeId].IsChecked(true);
               break;
            case ('false'):

               viewModel.Results()[nodeId].IsCompleted(false);
                viewModel.Results()[nodeId].IsChecked(false);
                var idName = getSuffixRowID(nodeId);
                 $('#' + idName).css('display', 'block !important;');
                break;
        }
    }
复选框元素的id是通过foreach内部的$index变量分配的。通过查看GenerateHTML页面,我实现了重复生成。它有两个重复的foreach标记。非常感谢您的帮助


谢谢

这不是使用KnockoutJS编码的方式:

onclick:'testFunction.apply(this);return true;'}
结果对象应该有两个属性(每个复选框对应一个属性)。 因此,假设您的结果对象如下所示:

var Result = function() {
    var self = this;
    self.checkbox1 = ko.observable();
    self.checkbox2 = ko.observable();
};
复选框的绑定将是:

onclick: $parent:testFunction, value : checkbox2
如果需要,可以添加id绑定

以及TestFunction:

function testFunction(result/* the result item */) {
   if(result.checkbox2()) {

   }
   [...]
};
使用Knockout,您不应该直接修改视图。您必须利用viewModel,knockout将为您修改视图

也请看一看这个

我希望有帮助

function testFunction(result/* the result item */) {
   if(result.checkbox2()) {

   }
   [...]
};