2013-05-08 2 views
0

우리는 기존의 ViewModel에 많은 속성이 있지만 뷰의 드롭 다운을 채우기 위해 enum 목록도 가지고 있습니다. 전화 할 때Knockout.js와 Viewmodel을 사용하여 데이터를 서버로 다시 전달하는 가장 좋은 방법

내가, 당신이 Knockout.js를 사용하여 다시 JSON 정보를 게시하려고 할 때 나타났습니다 :

열거 형을 포함하여 다시 보낼 때 그것은 모델의 모든 변환
ko.toJSON(viewModel); 

, 이는 데이터를 저장하기 위해 서버로 다시 보내려고 할 때 필요하지 않습니다.

그냥 데이터를 래핑하고 게시하는 것이 좋겠지 만 녹아웃을 사용하여 열거 형없이 데이터 값만 다시 게시하는 좋은 깨끗하고 간단한 방법이 있습니까? 이 작업을 수행하는 가장 좋은 방법은 무엇입니까? ViewModel에 열거 형을 포함해야합니까? 아니면 나쁜 디자인입니까?

+1

[이 블로그 게시물 읽기 ] (http://www.knockmeout.net/2011/04/controlling-how-object-is-converted-to.html) – Posthuma

+0

@Posthuma : OP가 대답을 수락 할 수 있도록 답변으로 게시 해주십시오. –

+0

@ChrisPratt 죄송합니다. – Posthuma

답변

2

체크 아웃 유사한 질문에 대한 내 대답 :

https://stackoverflow.com/a/14629775/91189 예,보기 모델 등 뷰에 필요한 모든 데이터, 열거를 포함해야합니다. 서버에 게시하는 데이터에 모든 뷰 모델의 데이터가 포함될 필요는 없습니다. 간단한 방법은 서버에 데이터를 보낼 준비가되면 요청에 필요한 데이터 만 포함하는 모델을 생성하는 것입니다.

조금 더 다른 접근 방식은 모델을 뷰 모델의 속성으로 표시하고 필요에 따라 뷰를 바인딩하는 것입니다. 그런 식으로 모델이 사전 제작되고 준비가되었을 때 제출할 준비가됩니다.

var viewModel = { 
    enum1: ko.observableArray([...]), 
    enum2: ko.observableArray([...]), 
    data: { 
     ... // other properties you want to post to the server 
    } 
}; 

을 만 data 속성을 다시 게시 : 당신이 Underscore.js를 사용하는 경우

ko.toJSON(viewModel.data); 

또 다른 가능성은,의 _.omit을 사용하는 것입니다

1

하나의 가능성은 다음과 같이 뷰 모델을 구성하는 것입니다 기능 :

ko.toJSON(_.omit(viewModel, "enum1", "enum2")); 
+0

@Cyanfish 감사합니다. 데이터 래퍼가 상당히 깨끗합니다. –

관련 문제