2017-03-16 4 views
0

매개 변수가 HTML에서 함수로 전달되는 방법에 대해 혼란스러워합니다. colorTest 기능에서 여러 매개 변수를 사용하여 녹아웃 클릭 바인딩

<tbody data-bind="foreach: colorItem"> 
    <tr> 
     <td data-bind="click: $root.colorTest.bind($data, 'red', 'blue'), text: 'color'"></td> 
    </tr> 
</tbody> 


public colorTest(data, param1, param2) { 
    if (param1 == 'red'){ 
     // do something 
    } 

, 나는 값 '블루'를 개최 값 '빨간색'과 'PARAM2'를 개최 $ 데이터를 보유 '데이터'와 'PARAM1'를 기대합니다.

그러나 $ 데이터는 항상 마지막 매개 변수 필드로 전달됩니다. 따라서 colorTest 함수에서 data = 'red', param1 = 'blue', param2 = '$ data'입니다.

이것이 녹아웃이 작동하는 방식입니까? $ data는 HTML 데이터 바인딩에서 처음으로 배치 되더라도 항상 마지막 매개 변수로 함수에 전달됩니까?

답변

2

.bind 함수는 녹아웃의 일부가 아니며 javascript 함수이며 첫 번째 매개 변수는 항상 "this"컨텍스트로 간주됩니다. 첫 번째 매개 변수 다음에 나오는 매개 변수 만 인수로 전달됩니다. Reference

당신은 다음과 같이 바인딩을 수정해야합니다 :

click: $root.colorTest.bind($root, $data, 'red', 'blue') 

넉 아웃은 바운드 인수 경과 얻을 $ 데이터와 $ 이벤트로 함수를 호출합니다.

+0

감사합니다. 이 작동합니다. 하지만 $ 데이터가 명시 적으로 전달되어야합니까? 당신이 말한대로, 녹아웃 자동 바인딩 된 인수 (나는 이것을 보았다) 후 $ 데이터와 $ 이벤트를 보냅니다. 실제로 $ data를 두 번 보내고 있습니까? "... colorTest.bind ($ root, 'red', 'blue')를 사용하고 내 함수의 세 번째 매개 변수로 $ 데이터를 캡처하여"public colorTest (param1, param2 , 데이터) "? – nanonerd

+0

네, 잘 작동합니다. –