2012-09-07 2 views
7

기본적으로 다른 개체에 대해 동일한 페이지에 바인딩을 다시 적용하려고하지만 이상한 동작이 있습니다. 바인딩을 다시 적용하면 항목 목록이 손실됩니다.녹아웃에서 바인딩 다시 적용

여기를 참조하십시오 http://jsfiddle.net/baio/9UcUs/5/

무엇을 할 수 있나요?

+0

이 질문에 직접 답해 드릴 수는 없지만보다 녹아웃을 사용하는 더 일반적인 방법은보기 모델을 바인딩 한 다음 매번 전체 모델을 변경하는 대신 모델의 내용을 변경하는 것입니다. 예제는 http://jsfiddle.net/9UcUs/8/을 참조하십시오. –

+0

관련된 코드는 *** (항상 jsFiddle이 아니라)에 ***이되어야합니다. –

답변

6

짧은 대답은 지원되지 않는다는 것입니다. 오랜 대답은 그 주위에 몇 가지 방법이 있다는 것입니다. 한 가지 방법은 앞에 applyBindings을 호출하는 것이지만 이벤트 처리기는 지워지지 않습니다. 또 다른 방법은 관찰 가능 모델에 당신의 뷰 모델을 랩핑 한 다음 관찰 대상을 갱신하여 바인딩을 다시 적용하는 것입니다. 이것은 훨씬 잘 작동하지만, 여전히 약간의 문제가 있습니다 (아래 참조). http://jsfiddle.net/mbest/9UcUs/9/

내가 관찰 뷰 모델을 사용하여 발견 한 유일한 문제는 해당 이벤트 핸들러가 완전히 새로운 뷰 모델에 업데이트되지 않습니다이다 :

다음은 관찰 뷰 모델 방법을 사용하여 예입니다. 새 뷰 모델에서 올바른 함수를 호출하지만 원래 뷰 모델의 값은 thisdata입니다.

편집 : (현재 이번 달에 출시 될 예정)

녹아웃 3.0를 완벽하게 지원 관찰 뷰 모델. 여전히 사용자 정의 바인딩에 문제가있을 수 있지만 잘하면이 모든 내용은 곧 문서화 될 것입니다.

4

같은 뷰 모델을 다른 요소에 바인딩 할 수 있습니다. 바인딩을 적용 할 요소를 지정해야합니다.

ko.applyBindings(vm, $('#yourul')); 

ko.applyBindings(vm, $('#div')); 
+6

knockout은 jQuery에 의존하지 않는다는 것을 기억하자 :'$ ('yourul') [0]'과'$ ('div') [0]'을 대신 사용하라. –

0

수행 :

ko.applyBindings(viewModel, $('#somejQObj')[0]); 

작품을 @ fengd의 대답의 코멘트에 명시된 바와 같이. 현재 foreach 문으로 채워진 표가 있으며, 각 표에는 foreach 문으로 채워지는 동적으로 추가 된 하위 표가있는 확장 가능한 행이 있습니다. 위의 작업을 수행하면 각 하위 테이블이 동적으로 삽입 된 후 하위 테이블에 대한 바인딩이 설정되고 데이터가 채워집니다.

관련 문제