2016-04-12 11 views
1

私はオブジェクト(学生)の検索可能なリストを作成しています。私はリストにオブジェクトを追加するときに、私はオブジェクトIdを渡すクリックイベントハンドラを追加したい。ObservableArray.push()がクリックイベントを発生させます

私が観察配列作った:

<script> 
self.studentList = ko.observableArray(); 

// (...) if search conditions are met, add student to array 
self.studentList.push(singleStudent); 

</script> 

をそして、それはHTMLです:クリックすると、それ自体が作品

<script> 
    function ClickEvent(pId) 
    { 
     console.log(pId); 
    } 
</script> 

<tbody data-bind="foreach: studentList"> 
<tr> 
    <td><span data-bind='text: $data.Name, click: ClickEvent($data.Id)'></span></td> 
</tr> 

、クリックでトリガーされなければならない機能良い。問題は、self.studentList.push(singleStudent)行がイベントをトリガーするということです。

エレメントをクリックした場合にのみトリガーされるイベントを追加するにはどうすればよいですか?

答えて

2

clickハンドラに正しく接続されていません。これは、関数への参照ではなく実際に実行された結果を渡したためです。

現在の形式では、バインディングが解析されるたびに、ClickEventが実行されます。あなたの配列に新しい項目を追加するとき。

<td> 
    <span data-bind='text: $data.Name, click: ClickEvent.bind($data, $data.Id)'></span> 
</td> 

は、マニュアルでも参照してください:Accessing the event object, or passing more parameters

あなたは匿名関数

<td> 
    <span data-bind='text: $data.Name, click: function() { ClickEvent($data.Id) }'></span> 
</td> 

それとも、bind functionを使用することができますし、それをラップする必要があり、それを修正するには

関連する問題