2012-07-07 4 views
1

바이올린 here녹아웃 매핑 문제

내가 내 뷰 모델에 수집에 직접 매핑 할 객체의 배열을 가지고,하지만 난 매핑을 사용자 정의 할 수 있습니다. data.UserReports 컬렉션에 단 하나의 항목이 없으면 코드가 작동하지 않습니다.

개체 그래프에 다른 레이어를 추가하면 할 수 있습니다. 예를 들어 data.UserReports를 model.UserReports에 매핑하는 대신에 할 수 있습니다. 모델에 Foo라는 속성이있는 경우 데이터를 foo로 매핑하고 model.Foo.UserReports를 통해 컬렉션에 액세스 할 수 있지만 바람직하지 않으며 지저분합니다.

나는 또한 data.UserReports 배열을 반복하고 각 UserReport를 모델 컬렉션으로 밀어 넣으면 할 수 있다고 생각한다. 그러나 다시 이것은 서툴러 보인다.

그래서 바이올린에 문제가 있습니까?

답변

1

그 바이올린의 코드가 적어도 나를 위해 작동하지 않습니다.

function PageModel() { /* ... */ } 

$(document).ready(function() { 
    var model = new PageModel(); 

    // Don't replace some observable, but extend the view model automatically, 
    // creating an observable for each property in "data". 
    ko.mapping.fromJS(data, userReportMapping, model); 

    ko.applyBindings(model); 
}​);​ 

http://jsfiddle.net/Quu4f/27/


업데이트 :하지만 그러나, 여기 당신이 일반적으로 기존 뷰 모델 인스턴스와 매핑 플러그인을 사용하는 방법입니다 또한 필요/지정해야하는 키에 데이터 개체에 매핑 옵션을 적용해야합니다.

var userReportMapping = { 
    'UserReports': { 
     key: function(data) { 
      return ko.utils.unwrapObservable(data.Id); 
     }, 
     create: function(options) { 
      return new userReportModel(options.data); 
     } 
    } 
}; 

그러나 이상한 점은 다음과 같은 경우에 오류가 발생한다는 것입니다. 데이터 세트에 동일한 ID를 가진 두 개의 항목이 있습니다. "create"콜백이 복제본에 대해 실행되지 않은 것처럼 보이지만 정상적인 관찰 가능 항목은 계속 만들어집니다. 그것은 필요에 따라 작동하지 않습니다 - -

http://jsfiddle.net/Quu4f/29/

+0

그림과 같이 매핑 차이가 없습니다 일을 얻는다 코드를 사용하기위한 위 내 "대답을"볼 수 있지만 (IMO) – BonyT

+0

이상적인 죄송 아니다 - 물론 명확하게해야합니다 - 물론 코드를 게시했습니다 - 제가 고민하고있는 문제는 매핑을 사용자 정의하여 배열을 처리하는 방법입니다. – BonyT

+0

@ BonyT 알았어, 바로 그걸 얻지 못했다. 또 다른 비트를 발견하고 내 답변을 업데이트했습니다. 그러나 지금 그것이 당신이 찾고있는 것이라면 여전히 확실하지 않습니다. – Niko

0

This은 배열을 반복하여 차례대로 각 항목을 관찰 가능한 컬렉션으로 밀어 넣는 것입니다. 더 좋은 방법이 있습니까?