2011-04-27 4 views
0

다음 json 데이터가 있습니다. 이제이 예제를 기반으로 레코드를 만들고 싶습니다. 레코드를 만들려면 다음 구조를 사용하지만, CONTACT_INFO를 중첩 된 요소로 삽입하는 방법을 알고 있어야합니다.중첩 된 json 요소에 대한 레코드 만들기

참고 : 내가 직접 GRID에서 값을 읽고있다 (그러나 그리드에서 나는 중첩 된 요소 CONTACT_INFO을 받고 다음 레코드를 생성 할 있지 않다)

RECORD

var record= Ext.data.Record.create([ 

       { name: 'CANDI_SR_NO'}, 
       { name: 'CANDI_NAME'}, 
       { name: 'CANDI_CASTE_BAR'}, 
       { name: 'CANDI_IS_NRI'}, 
       { name: 'CANDI_CASTE'}, 
       { name: 'CANDI_SUB_CASTE'}, 
       { name: 'CANDI_STATUS'}, 
       { name: 'CANDI_AGE'}, 
       { name: 'CANDI_HEIGHT'}, 
       { name: 'CANDI_NATIVE_PLACE'}, 
       { name: 'CANDI_EDUCATION'}, 
       { name: 'CANDI_DESIGNATION'}, 
       { name: 'CANDI_COMPANY'}, 
       { name: 'CANDI_EMAIL_1'},    
       { name: 'CANDI_EMAIL_2'}, 
       { name: 'CANDI_EMAIL_3'}, 
       { name: 'CON_L_1'}, 
       { name: 'CON_L_2'}, 
       { name: 'CON_L_3'}, 
       { name: 'CON_M_1'}, 
       { name: 'CON_M_2'}, 
       { name: 'CON_M_3'}, 
       { name: 'CANDI_SALARY'},       
       { name: 'CANDI_COMMENT'}, 

        ]); 

나뿐만 위의 JSON 형식의 데이터를 보내려고하지만 난을 클릭하면 폼의 버튼을 제출

[ 
    { 
    "CANDI_SR_NO": "12", 
    "CANDI_NAME": "XYZ", 
    "CANDI_CASTE_BAR": false, 
    "CANDI_IS_NRI": "false", 
    "CANDI_CASTE": "RAS", 
    "CANDI_SUB_CASTE": "", 
    "CANDI_STATUS": "", 
    "CANDI_AGE": "", 
    "CANDI_NATIVE_PLACE": "", 
    "CANDI_EDUCATION": "", 
    "CANDI_DESIGNATION": "", 
    "CANDI_COMPANY": "", 
    "CONTACT_INFO": 
     { 
     "CANDI_EMAIL_1": "asdf", 
     "CANDI_EMAIL_2": "", 
     "CANDI_EMAIL_3": "", 
     "CON_L_1": "asdf", 
     "CON_L_2": "", 
     "CON_L_3": "", 
     "CON_M_1": "", 
     "CON_M_2": "", 
     "CON_M_3": "" 
     } 
    , 
    "CANDI_SALARY": "",  
    "CANDI_COMMENT": "" 
    } 
] 

JSON. 그래서 나는 json 내부에 중첩 된 요소를 보낼 수 있도록 extjs에 레코드를 만드는 방법을 묻습니다.

답변

0

아마도 mapping을 찾고있을 것입니다.

으로 지역 : 쓰기 위해

{ name: 'CANDI_EMAIL_1', mapping: 'CONTACT_INFO.CANDI_EMAIL_1'}, 

, 당신은 또한 Ext.data.JsonWriter 사용중인의 toHash 기능을 업데이트해야합니다. 기본 객체는 중첩 된 객체를 처리 할 수 ​​없습니다.

가장 쉬운 방법은 특정 toHash 함수를 작성하는 것이지 일반화 된 방법이 아닌 것일 수 있습니다. 이 같은 Ext.data.Record 감안할 때 :이 많이 할 것으로 예상되는 경우

CandiWriter = Ext.extend(Ext.data.JsonWriter, { 
    toHash: function(rec) { 
    return { 
     CONTACT_INFO: { 
     CANDI_EMAIL_1: rec.get('CANDI_EMAIL_1') 
     } 
    }; 
    } 
}) 

당신은 일반화를 쓸 수 있습니다,하지만 난 그것을 기대 :

var rec = new record({ 
    ... 
    'CANDI_EMAIL_1': '[email protected]' 
    ... 
}); 

그런 다음이 같은 JsonWriter을 사용하십시오 단지 JsonWriter을 유지하는 것보다 오래 걸릴 것입니다.

+0

글쎄,이 매핑은 JSON에서 데이터를 받기위한 것입니다. 중첩 된 필드로 JSON을 보내고 싶습니다. – Hunt

+0

글쎄, jsonWriter의 해시 함수를 오버라이드하는 방법을 찾을 수있는 곳이 어디 있니? – Hunt

+0

내 대답에는 'JsonWriter'의 서브 클래스를 만들어서 재정의 할 수 있습니다. 그런 다음 JsonWriter 중 하나 대신 작가에게 CandiWriter 인스턴스를 사용합니다. – wombleton

관련 문제