2013-01-07 5 views
3

나는 실제로 다른 observableArray가있는 observableArray 인 복잡한 knockout.js 객체를 가지고 있습니다. 두 번째 배열에서 선택한 요소를 비동기 적으로 제거하는 제거 기능이 있습니다. 항목이 데이터베이스에 보관되는 동안 클라이언트 측에서 관찰 가능한 속성 중 하나가 false로 설정되어 화면에서 사라집니다.parent 객체를 참조하는 knockout.js

는 제거 버튼 이벤트는 $ 루트 키워드를 사용하여 만들어집니다 : 나에게 "이"키워드를 사용하여 선택된 요소의 세부 사항에 액세스 할 수 있습니다 무엇

<a href="#" data-bind="click: $root.RemoveActivity">Remove</a> 

. 내 문제는 두 번째 배열에서 항목을 삭제하는 동안 첫 번째 배열의 부모 항목으로 변경하고 싶습니다. "this"키워드가 하위 항목을 참조한다고 언급 했으므로 동시에 상위 항목에 액세스 할 수있는 방법이 있습니까?

+1

당신은'$ 매개 변수로 parent'를 전달하는 시도 할 수 있습니다을 $ root.RemoveActivity (data, event, $ parent);} "그러면 부모 매개 변수가 thrid 매개 변수로 전달됩니다. – nemesv

+0

답변 해 주셔서 감사합니다! – Bartosz

답변

7

mhu의 대답은 ViewModel과 뷰 구조 사이에 종속성을 만들기 때문에 반 패턴입니다. `데이터 바인딩 = "클릭 : 기능 (데이터, 이벤트) {반환

대신

<a href="#" data-bind="click: $parent.removeActivity.bind($parent)">Remove</a> 

부모 뷰 모델

removeActivity: function(activity) { 
    this.activities.remove(activity); 
} 
+0

네 말이 맞아,이게 훨씬 좋다. 이 방법으로 bind()를 사용할 수 있다는 것을 깨닫지 못했습니다. – mhu

+0

감사합니다. 반 패턴 문장에 불쾌감을 느끼지 않았 으면 좋겠지 만, 더 복잡한 사이트에서는보기에 대한 하드 커플 링에 문제가 생길 수 있으며 테스트하기가 더 어려워 질 수도 있습니다. – Anders

+0

반 패턴 뭐야? 모델에 자체 삭제 작업을 포함 할 수 있도록 선택적 인수를 사용하여 상위 모델에 대한 하위 모델 링크 생성자를 가질 것을 고려 중입니다. 그것은 당신이 안티 패턴이라고 부르는 것이거나 mhu가 다른 말을 한 것입니까? –

관련 문제