17

나는 잠시 동안 검색을 해왔다. 그리고 나는 이것이 새로운 질문이며, 제목과 같은 반복이 아니라고 확신한다. :)템플릿 렌더링 후 KnockoutJS 바인드 이벤트

기본적으로, KnockoutJS가 jQuery 템플릿과 같은 것을 사용할 때 템플릿 렌더링 후에 만들 수있는 구독 가능한 이벤트가 있는지 확인하려고합니다.

내장 된 "afterRender"를 사용 하겠지만 관찰 가능한 배열이 지워지면 작동하지 않는다는 것을 알았습니다. 문제를 설명하기 위해이 데모를 만들었습니다 : http://jsfiddle.net/farina/YWfV8/1/.

또한 맞춤 처리기를 작성할 수 있다는 것을 알고 있습니다.하지만 필요한 경우 실제로는 불필요합니다.

템플릿이 렌더링을 마친 후에 발생하는 하나의 이벤트 만 원합니다.

답변

29

제 동료는 집에 가기 전에 놀고 있던 무언가를 사용하여 지난 밤에 실제로 해결했습니다.

그래서 "afterRender", "afterAdd"및 "beforeRemove"이벤트의 "문제"는 "foreach"바인딩과 함께 다르게 작동한다는 것입니다. KnockoutJS는 자신의 1에서이 사실을 말할만큼 충분히 멋지지만, 실제로 그것을 보았을 때까지는 아무 이유없이 실제로 나를 가라 앉히지 않았습니다. 진짜로 작동 무엇

바인딩 전체 "foreach 문을"스크랩 및 개편의 기본 "데이터"를 사용하는 것입니다 같은 바인딩 :

data-bind="template: { name: 'item-template', data: items, afterRender: caller }" 

그런 다음 "afterRender"는 이름에서 알 수 정확하게 작동합니다.

나는 foreach없이 컬렉션을 반복하고 새 UI를 렌더링 할 수 없다는 인상하에 있었지만,이 예제는 작동한다는 것을 보여줍니다. 가끔 하나 또는 다른 필요하기 때문에

나는 두 뷰 모델 스타일에 대한 예를했다 .

도움 주셔서 감사합니다. Dan !!

+0

불행히도 녹아웃 기준으로 인해 두 펜 모두 고장났습니다. 또한 템플릿 바인딩을위한 'foreach' 속성이 http://knockoutjs.com/documentation/template-binding.html#note-2-using-the-foreach-option-with-a-named-template에 있습니다. – Olga

-1

beforeRemove은 찾고 계십니까? 나는 당신이 원하는 행동을 확신하지 못합니다. 이 샘플을 체크 아웃하십시오 : http://jsfiddle.net/romanych/YWfV8/8/ 원하시나요, 그렇지 않은가요?

+0

beforeRemove는 템플릿이 렌더링되기 전에 실행되기 때문에 실제로 덮지 않습니다. 템플리트가 완료된 정확한 순간을 활용해야합니다. – farina

관련 문제