在淘汰赛中将绑定应用于多个元素

Posted

技术标签:

【中文标题】在淘汰赛中将绑定应用于多个元素【英文标题】:Applying bindings to multiple elements in knockout 【发布时间】:2017-05-05 07:41:03 【问题描述】:

我一直在使用敲除,但我遇到了这个错误“您不能多次将绑定应用于同一个元素”。我在这里阅读了一些解决方案,并尝试使用其中之一。

这是我的代码 sn-p

页面加载完成后应用绑定

 $(document).ready(function()
        
            $.each(sections, function(index0, v)
              
                 console.log("I am here");
                  $.each(v, function(index1, v1)
                  
                      console.log("went inside the looping statement");
                       console.log(index1);
                       ko.applyBindings(new Model, document.getElementById(index1));

                  );
              );
        );

我通过它调用 id 的 JSON

var sections =
  
    defects :
    
        a : '',
        b : '',
        c : '', 
    

  ;

a,b,c 是我的 html 代码中的 id。 这是 ViewModel 的代码

 var Model = function()
  
    var self = this;
      self.radio = function(key,key1)
       
          console.log(key,key1);
          return;    
       
   

HTML 代码

<tr  class=""   id="a" >
           <td>
               <div  class="col-lg-12 col-md-12 col-sm-12 col-xs-12 question" >
                   <label class="QuestionTextProperties">Question 1 </label>
               </div>
               <div class="btn-group col-lg-12 col-md-12 col-sm-12 col-xs-12" data-toggle="buttons">
                     <label  class="btn col-lg-6 col-md-6 col-sm-6 col-xs-6" >                              <input  type="radio"   name="a" data-bind="click:radio('defects','a')" class="a"   value="0"   id="a_No" ><i class="fa fa-circle-o "></i><i class="fa fa-check-circle-o "></i><span class="OptionsTextProperties">  No </span>                          </label>
                     <label  class="btn col-lg-6 col-md-6 col-sm-6 col-xs-6" >                              <input  type="radio"   name="a" data-bind="click:radio('defects','a')"  class="a"   value="1"   id="a_Yes" ><i class="fa fa-circle-o "></i><i class="fa fa-check-circle-o "></i><span class="OptionsTextProperties">  Yes </span>                           </label>
               </div>
           </td>
</tr>

非常感谢任何帮助。提前谢谢你。

【问题讨论】:

显示您的 html。您绑定的元素不能是彼此的孩子/父母。例如。 #id1 &gt; #id2 是不允许的,而#id1 + #id2 我们确实需要查看您的 HTML 和 index1 的值。如果所有部分都是兄弟,那么您的代码应该可以正常工作,但是错误消息有点表明您有嵌套的部分。 我确实找到了解决方案,但它稍微改变了我的方法。我想我通过阅读您的 cmets 了解了我所犯的错误。我已经用 HTML 编辑了这个问题。谢谢。 【参考方案1】:

如果你能帮上忙,你真的只想在整个文档上应用一次。将您的页面视为模型的视图,然后相应地创建模型。 'applyBindings' 方法在幕后发生了很多事情,它创建了大量的观察者和订阅。

您作为示例使用的现有代码不是很清楚,因此可以制定示例解决方案,但是如果您在 Plunkr 或其他一些基于云的代码 haus 中创建问题,那么应该会有更好的建议。

【讨论】:

以上是关于在淘汰赛中将绑定应用于多个元素的主要内容,如果未能解决你的问题,请参考以下文章

淘汰赛:如何检查绑定是不是已应用于页面区域

淘汰赛类绑定在组件中不起作用

淘汰赛中的数据绑定不适用于多个属性

如何使用淘汰赛绑定新元素?

淘汰赛 - JS 分裂

动态生成元素的淘汰数据绑定