program tip

knockoutjs-로드시 트리거되는 매개 변수가있는 바인딩

radiobox 2020. 11. 24. 07:52
반응형

knockoutjs-로드시 트리거되는 매개 변수가있는 바인딩


최근에 많은 knockoutjs를하고 있는데 이상한 일이 발생했습니다.

이 바이올린 http://jsfiddle.net/hqXjv/ 에서 볼 수 있듯이 바인딩을 설정할 click: testMethod때 버튼을 클릭하면 작업이 실행됩니다.

이 바이올린에서 볼 수 있듯이 http://jsfiddle.net/kxTzM/click: testMethod('hi') 액션에 대한 바인딩을 설정할 때 버튼을 클릭 할 때와 페이지로드시 모두 실행됩니다 (applyBindings에서 추측하고 있습니다)

문제를 재현하는 데 매개 변수가 필요하지 않습니다 click: testMethod(). 첫 번째 바이올린에서 바인딩을 변경하면 페이지로드시 트리거되는 것을 볼 수 있습니다.

예, 요소에 다른 속성을 추가하고 매개 변수로 사용하려고 시도 할 수 있지만 내 질문은 매개 변수를 onload를 트리거하지 않고 knockoutjs 바인딩에 전달하는 방법이 있다는 것입니다. 이것이 버그라면 그럴 수도 있지만 나는 그것을 피하는 방법을 알고 싶습니다.


이 녹아웃 페이지의 "참고 2"가 모든 것을 설명한다고 생각합니다.

http://knockoutjs.com/documentation/click-binding.html

다음 중 하나를 사용하여 문제를 피할 수 있습니다.

익명 기능 :

<button data-bind="click: function(data, event) { myFunction(data, event, 'param1', 'param2') }">Click me</button>

... 또는 ...

바인드 방법 :

<button data-bind="click: myFunction.bind($data, 'param1', 'param2')">Click me</button>

다음은로드시 클릭 기능을 실행했습니다.

click: clickSpan()

아래와 같이 대괄호제거하면 함수가로드시 실행되지 않았습니다.

click: clickSpan

(이것은 위의 주 2에 설명되어 있지만 암호 형식이었습니다 :-)


나는 다음과 같은 상황에서 이것을 만났습니다.

  • Visual Studio 2013을 실행하고있었습니다.
  • 내 녹아웃 프로젝트는 TypeScript 1.5를 사용하고있었습니다.
  • Visual Studio 디버거를 사용하여 크롬에서 프로젝트를 실행하고있었습니다.
  • 일부 코드를 제대로 리팩터링하지 않았고 디버거를 다시 컴파일하거나 다시 실행하는 것을 무시했습니다.

이 때문에 나는 컴파일되지 않는 잘못된 TypeScript가 있었으며 그 효과에 대한 경고 나 오류가 발생하지 않았고 TypeScript에 대한 편집 내용이 자동으로 제대로 반영되지 않았다고 생각합니다. 생성 된 JavaScript 파일.

다른 사람들이 이것을 보는 것은 드문 일일 수 있지만, VS 디버거를 실행하는 동안 TypeScript를 제자리에서 편집하는 경우이 문제 또는 기타 예기치 않은 동작이 발생할 수 있다는 경고가 있습니다. Mark Robinson이 자동 생성 된 js 파일에서 설명한 상황을 만들었을 것 같지만 TypeScript에서는 보지 못했습니다.

참고 URL : https://stackoverflow.com/questions/9891282/knockoutjs-bindings-with-parameters-triggered-on-load

반응형