Knockout点击绑定参数

Dan*_*ana 9 javascript jquery knockout.js

我正在尝试向我的按钮添加一个click事件,只有在单击按钮时才会将Id,Category和Name作为参数发送.

<tbody data-bind="foreach: tehTab()">
    <tr>
       <td data-bind="text: $data.Category"></td>
       <td data-bind="text: $data.Name"></td>
       <td>
          <button type="button" class="btn chart_btn" role="button" data-toggle="popover" data-trigger="focus" data-html="true" data-placement="right" container="body" tabindex="0" data-original-title="" title="" style="border:none; background-color:white" data-bind="attr: { id: $data.Id,'data-contentwrapper':'.chartdraw' + $data.Id},click: getLast7($data.Id, $data.Category, $data.Name) , text:$data.Value"></button>
         <div data-bind="css: 'chartdraw' + $data.Id" class="chartdrawetc" style="display:none">ASD</div>
       </td>
   </tr>
</tbody>
Run Code Online (Sandbox Code Playgroud)

即使我试图改变:

click: getLast7($data.Id, $data.Category, $data.Name)
Run Code Online (Sandbox Code Playgroud)

 attr: { id: $data.Id ,onclick: getLast7($data.Id, $data.Category, $data.Name)
Run Code Online (Sandbox Code Playgroud)

它仍然会像tehTab长度一样多次触发getLast7方法.

我究竟做错了什么?

Raj*_*esh 21

添加()功能名称后会调用它.你将不得不使用.bind

click: getLast7.bind(this, $data.Id, $data.Category, $data.Name)
Run Code Online (Sandbox Code Playgroud)

样品

function vm(){
  this.notify = function(str){
    console.log(str)
  }
}

ko.applyBindings(new vm())
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.0.0/knockout-min.js"></script>
<div data-bind="click: notify.bind(this, 'Hello')">Click me</div>
Run Code Online (Sandbox Code Playgroud)