2012-03-15 3 views
42

내 뷰 모델에 observableArray이 있습니다. vm을 생성 한 후 데이터를 완전히 바꾸기를 원합니다. observableArray.Knockout.js의 모든 요소 대체 observableArray

//Initial Setup 
var vm = {}; 
vm.roles = ko.observableArray([]); 
ko.applyBindings(vm); 


//....replace array later on.... 
vm.roles(["1", "2"]); 

이 잘 동작하는 것, 그러나 이것은 정확하고 메모리 누수로 이어질 수 있을지 염려했다 : 여기에 내가 그것을하고있어 방법입니다. 모든 데이터를 바꾸려고한다고 가정하고 기존의 observableArray을 업데이트하는 것이 바람직한 방법이라면 누구든지이를 준수 할 수 있습니까?

눈치 채 셨습니다. removeAll() 메서드가 있고,이 작업을 수행하기 위해 호출해야하는지 궁금하거나, 제가하고있는 일과 잘 맞습니까?

답변

38

사용중인 기술은 observableArray의 데이터를 완전히 바꾸는 데 권장되는 방법입니다. observableArray은 실제로 기본 배열 및 트리거 알림에 작용하는 유용한 배열 작업을 위해 추가 기능이 추가 된 일반 observable입니다.

+3

를 다시했다. 당신에 대한 문서/링크를 지원 한 일이겠습니까 진술서? [존중과 더불어, 물론; 당신은 Mr. Knockmeout 자신입니다. (O;) – Kristopher

-4

권장 된 방법은 IE9 이하에서는 작동하지 않습니다. 대신 나는 당신이 "권장 방법"에 http://skeptics.stackexchange.com/ 차기에 질문에 대한 답변에서 내 훈련을 말할 때 객체,

vm.roles = ko.observableArray(["1","2"]) 
+0

최신 버전의 Knockout으로 변경되었는지 궁금합니다. 어떤 버전을 사용하고 있습니까? –

+14

전체 개체를 교체하면 관찰자에게 정확한 알림이 전송되지 않습니다. –