2014-09-17 1 views
2

다음은 컨텍스트입니다. 가시성이 관찰 가능한 부울에 연결되어있는 div가 data-bind="visible: theBoolean"입니다.'visible'규칙을 적용한 후에 함수 호출하기

부울을 true으로 전환하면 div가 표시되고 동작을 트리거해야합니다 (CodeMirror가 표시되지 않는 영역에서 초기화 될 때 CodeMirror가 올바르게 렌더링되지 않으므로 CodeMirror 객체를 새로 고침) .

바인딩 효과가 완료된 후 함수를 호출하는 방법을 찾지 못했습니다. 분명히 setTimeout을 사용할 수 있지만 더 좋은 방법이 있기를 바랍니다.

감사합니다.

답변

2

녹아웃 template 바인딩 afterRender 콜백 (그리고 많은 다른 콜백)의 지원을하고있다. http://knockoutjs.com/documentation/template-binding.html

afterRender 콜백에 액세스하려면 템플릿에보기를 래핑하는 것이 좋습니다.

사실 녹아웃 foreach 바인딩은 내부적으로 template 바인딩을 사용하여 해당 콜백을 지원합니다.

+1

제안 해 주셔서 감사합니다. 추가 트릭은 'visible'대신 'if'로 가시성을 제어하는 ​​것이므로 템플릿이 표시 될 때마다 'afterRender'이벤트가 발생합니다. – ThomasWeiss

+0

그것은 멋진 트릭입니다. – huocp

1

당신은 explicitly subscribe to the observable해야합니다

myViewModel.theBoolean.subscribe(function(newValue) { 
    if(newValue){ // (Or `newValue === true`, to check if it's not just truthy) 
     // The boolean changed to `true`! Do something here. 
    } 
}); 
+1

이렇게하면 여기에서 실행 된 코드가 div가 표시되기 전에 실행됩니다. observable (div 표시 설정)이 완료된 후 코드를 실행해야합니다. – ThomasWeiss

+0

그런 다음 짧은 시간 제한에 넣는 것이 좋습니다. – Cerbrus

+0

예, setTimeout을 사용하여 언급 한 옵션입니다. 귀하의 기여에 감사드립니다! – ThomasWeiss