2013-02-24 3 views
1

KO 사이트 (http://jsfiddle.net/rniemeyer/gZC5k/)에 제공된 중첩 편집기의 라이브 예제를 확장하여 레이아웃을 변경하고 더 깊은 레벨을 추가하려고 시도 할 때 두 가지를 처리 ​​할 수 ​​없었습니다 문제.중첩 된 편집기로 3 개 이상 누락되었습니다.

나는

var ContactsModel = function (contacts) { 
var self = this; 
self.contacts = ko.observableArray(ko.utils.arrayMap(contacts, function (contact) { 
    return { 
     firstName: contact.firstName, 
     lastName: contact.lastName, 
     phones: ko.observableArray(contact.phones), 
     addresses: ko.observableArray(contact.addresses) 
    }; 
})); 

두 문제

은,이 단계 http://jsfiddle.net/gZC5k/955/

내가 모델의 올바른 계층 구조를 구축하는 곳으로 붙어있어 얻을 수 있었지만 :

  • 초기 데이터 세트에로드 된 "전화"에 새 "전화"를 추가 할 수 없음 (새 전화를 만들 때 "전화"를 추가 할 수 있음)
  • "전화"를 삭제할 수 없습니다.

    self.removeCall = function (call) { 
    $.each(self.phones(), function() { 
        this.calls.remove(call) 
    }) 
    

    }};

도움을 주시면 감사하겠습니다.

답변

1

모델을 수정했습니다.이 코드를 바이올린의 송시 한 다음 확인을

그것은 완벽한

self.contacts = ko.observableArray(ko.utils.arrayMap(contacts, function (contact) { 
    return { 
     firstName: contact.firstName, 
     lastName: contact.lastName, 
     addresses: ko.observableArray(contact.addresses), 
     phones: ko.observableArray(ko.utils.arrayMap(contact.phones, function (phone) { 
      return{ 
       type: phone.type, 
       number: phone.number, 
       calls: ko.observableArray(phone.calls) 
      }; 
     })) 
    }; 
})); 
+0

감사합니다. @ 보스! 저것을 완전히 간과했다. Remove 함수를 html로 전송하여 더욱 최적화되어 전체 객체 트리를 순회 할 필요가 없습니다. 데이터가 많이있을 때 더 빠를 것이라고 추측합니다. – Graphileon

+1

감사합니다 @ 보스 최종 결과는 여기에 있습니다 http://jsfiddle.net/gZC5k/990/ – Graphileon

1

것은 삭제() 함수 observableArray

다음 removeCall

동일한 구조를 따르 addCall 방법

self.removeCall = function (call) { 
     alert(ko.toJSON(call)); 
    $.each(self.contacts(), function() { 
     $.each(this.phones(), function() { 
      alert(ko.toJSON(this)); 
     this.calls.remove(call) 
    }) 
    }) 
}; 

아래로 removeCall 방법을 변경할 때 통화를, 관찰 배열을 기대하기 때문에

+0

감사에게 @Boss 작동합니다. 여전히 관측 가능한 배열을 호출하는 것으로 고생하고 있지만 (http://jsfiddle.net/gZC5k/977/) 시도했지만 성공하지 못했습니다. 그래서 당신의 정확한 해결책 (내가 볼 수있는 한)은 여전히 ​​내가 바라는 효과가 없습니다. 항상 첫 번째 번호에서 통화를 제거하려고 시도합니다.) 그러나 제가 말했듯이, 오류는 당신의 솔루션이 아닌 모델에 있습니다. – Graphileon

+0

예 모델의 구문 오류가 발생하여이를 수정할 수 있습니다. – nav0611

+0

보기 모델에 구문 오류가 수정되어 다른 답변으로 추가되었습니다. 확인하십시오. 확인하십시오. – nav0611