2013-03-15 3 views
0

데이터를 서버로 보내기 전에 직렬화해야하는 데이터를 제어하려고합니다. 이렇게하려면 다음을 수행하십시오.프로토 타입이 정의되지 않았습니다.

viewModel.prototype.toJSON = function() { 
    var copy = ko.toJS(this); 
    delete copy.QuoteListViewModel; 
    return copy; 
}; 

그러나 프로토 타입은 정의되지 않았고 실패합니다.

뷰 모델은 mvcKnockout에 의해 생성되고 내가 좋아하는 일을 할 수 있기 때문에 존재 :

viewModel.QuoteSelectedViewModel = ko.observable(); 

왜 프로토 타입이 정의되지를?

+2

viewmodel이란 무엇입니까? 그냥 JS 개체입니까, 아니면 함수입니까? 프로토 타입은 함수에 대해서만 적용됩니다. JS 객체를 똑바로 세우는 것이 아니라 믿습니다. –

+0

프로토 타입에 추가하기 전에 생성자가 선언 되었습니까? – Wryte

+0

@Paulhum, 사실 당신 말이 맞아요, viewModel은 다음과 같이 정의됩니다 : var viewModel = ko.mapping.fromJS (viewModelJs); 그러면 서버에 제출하기 전에 속성을 어떻게 삭제합니까? – Sam

답변

1

프로토 타입은 함수에만 적용됩니다. JS 객체가 스트레이트 업되지 않았다고 생각합니다. 따라서 뷰 모델이 함수로 선언되지 않았 음을 짐작하게됩니다.

오히려 당연히, 당신이 그것을 말해 속성을 무시 것이다 ignore map를 사용하여 매핑에 mapping plugin documentation의 섹션에서 봐 가지고, 서버에 전송하기 전에 속성을 삭제하려면, 당신의 의견에 질문에 대답하려면 뷰 모델을 JS 객체로 복사 할 때.

+0

ko.fromJS를 호출 할 때 속성을 무시할 수 있지만 ko.toJS를 호출 할 때는 다른 방법으로 처리 할 수없는 것처럼 보입니다. 최소한 문서는 그것에 대해 명확하지 않습니다. JS 객체로 다시 매핑 할 때 속성을 무시할 수 있습니까? – Sam

+0

언제부터 모든 유형에'.prototype'이 적용되지 않습니까? 아니면 당신이 말하는 넉 아웃과 관련된 특별한 것입니까? – Ian

+0

@ user1098555 ko.toJS 메소드가 아니라 매핑 된 플러그인을 사용해야합니다. –

0

delete 개체를 복사하겠습니까? ignore it during the mapping? 다음은 간단한 예입니다.

function viewmodel() { 
    var self = this; 

    this.ignore = ko.observable("ignore"); 
    this.copy = ko.observable("copy"); 

    this.toJS = function() { 
     var mapping = { 
      'ignore': ["ignore", "toJS"] 
     } 

     return ko.mapping.toJS(self, mapping); 
    }; 
}; 

var vm = new viewmodel(); 
ko.applyBindings(vm); 

console.log(vm.toJS()); 

JSFiddle

관련 문제