knockout js 页面加载的时候自动执行 click

 <ul class="dropdown-menu color-menu" aria-labelledby="colorLabel" data-bind="foreach: $parent.colors">
     <li data-bind="attr: { class: color },event: {click: $root.changeColor($parent.id,color)}">&nbsp</li>
 </ul>
 
 
   var SettingModel = function () {
       self.colors = ko.observableArray([
            { color: 'bg-green' },
            { color: 'bg-red' },
            { color: 'bg-yellow' },
            { color: 'bg-aqua' }
        ]);
        
         self.changeColor = function (id, color) {
             console.log(id() + "|" + color)
         }
   }
   

在页面加载的时候会自动执行click,每个元素对应的li元素都执行一遍changeColor。不是应该点击了之后再执行吗?

阅读 3.9k
2 个回答
click: $root.changeColor()

后面加了 () 就会执行……

若果要实现带参数的方法,可以考虑匿名的写法。

 <li data-bind="click: function() { $root.changeColor($parent.id,color)},attr: { class: color } ">&nbsp;</li>
新手上路,请多包涵

我也遇到了同样的问题,我用了$parent.changeColor.bind($parent.id,color)解决的,楼主可以试一下

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进