2014-09-29 2 views
2

여기에 이상한 사용 사례가있을 수 있습니다. code, title, description 속성이있는 Code 모델이 있습니다. 사용자는 업무 (의료)를 문서화하고 있으며 , 예를 들어 7을 입력하고 7은 항상 "환자는 완치되었습니다"라고 말합니다. 상관 없어요. 요점은 모든 모델에 titledescription을 저장하는 것을 원하지 않지만 표시하도록 끌어낼 수 있기를 바랍니다.CanJS parseModels 및 데이터 강제 변환

그래서 API는 [ 1, 13, "A4" ]과 같은 코드 배열을 제공합니다. 나는 그 배열을 Code 모델로 강요하기 위해 can.Model.parseModelcan.Map.define을 모두 사용하려고하는데, 힘든 시간을 보내고 있습니다.

왜 parseModel은이 예제에서 호출되지 않았습니까?fiddle

Code = can.Model.extend({ 
    parseModel: function(data) { 
    // return { code:data } 
    console.log('Never hit!'); 
    }, 
    parseModels: function() { 
    // ... 
    console.log('Never hit!'); 
    } 
},{ 
    _title: can.compute(function() { 
    // return title from cached lookup 
    }) 
}); 

Model = can.Model.extend({ 
    findAll: 'GET /Models' 
},{ 
    define: { 
    Codes: { 
     Type: Code.List 
    } 
    } 
}); 

can.fixture('GET /Models', function() { 
    return [ 
    { Codes: [1,2,3] }, // I want to turn each number into an object 
    { Codes: [4,5,6] }, 
    { Codes: [7,8,9] } 
    ]; 
}); 

Model.findAll({}); 

답변

2

.parseModels은 CRUD 서비스 데이터를 검색하는 동안이라고합니다.

예제를 적용하려면 Model.parseModel을 각 코드 배열을 개체 배열로 변환해야합니다.

Codes: { 
    type: function(newVal){ 
    if(newVal instanceof Code.List) { 
     return newVal 
    } else { 
     return new Code.List(newVal.map(function(num){ return {value: num}})) 
    } 
    } 
} 
+0

감사 :

다른 방법으로, 당신은 같은 뭔가 모델의 define.Codes.Type을 변경할 수 있습니다. 그것이 내 추측 중 하나였습니다. 픽스쳐가 예상대로 parseModels를 사용하면 좋을 것이다. –

+1

조명기 응답은 parseModels를 통해 실행됩니다. 다만, 요구를 실시하는 모델의 parseModel 만입니다. parseModels는 Ajax 데이터를 조작하기위한 것입니다. 다른 것은 define 플러그인으로 수행해야합니다. –

+0

아, 그거 지워. –