2014-06-09 2 views
0

Knockout.mapping을 Knockout.validation과 함께 사용하여 간단한 유효 뷰 모델을 만들려고합니다. 나는 create 함수를 가로 질러 ko.mapping에 왔고 내 요구에 맞을 것이라고 생각했지만 options.parent 속성이 내가 기대하는 것으로 설정되지 않은 것 같습니다 :생성에 전달 된 옵션의 부모가 잘못 되었습니까?

이것은 내가 사용하고있는 기본 코드입니다. JSFiddle을 볼 수 있습니다.

var o = { 
    test: { 
     value: "bob", 
     validation: "{ required: true; }" 
    } 
}; 
var mapping = { 
    'value': { 
     create: function (options) { 
      console.log(options.parent === o.test); 
     } 
    } 
}; 

var vm = ko.mapping.fromJS(o, mapping); 

잘못된 것이 있습니까? 아니면 버그입니까? 이 단지 사람이 문제를 해결있는 비교적 간단한 방법으로 생각할 수 깨진 경우

create: function(options) { 
    var result = ko.mapping.fromJS(options.data); 
    if(options.parent.validation !== undefined) { 
     result.extend(options.parent.validation); 
    } 

    return result; 
} 

: 내 궁극적 인 목표는 내가 만들에 다음과 같은 라인을 따라 뭔가를 호출 할 것입니다? 필자가 지금까지 생각해 낸 유일한 해결책은 불필요한 복잡성을 많이 겪는 관측 대상을 수동으로 확장하는 재귀 속성 검색입니다.

답변

1

처럼 그들을 채우기 위해 매핑 플러그인을 사용합니다 :

var o = { 
    test: { 
     id: "1", 
     value: "bob", 
     validation: "{ required: true; }" 
    } 
}; 
var mapping = { 
    'value': { 
     create: function (options) { 
      console.log(options.parent.id() === o.test.id); 
     } 
    } 
}; 

테스트 here

+0

시작하기 전에 디버깅을 시도했는데'console.log ('validation :'+ options.parent.validation);''undefined '를 기록했습니다. – Ian

+0

왜냐하면 option.parent가 매핑 되었기 때문입니다 원본 데이터가 아닌 객체입니다. 그리고 선언 된 것과 동일한 순서로 매핑합니다. 유효성 검사 전에 값이 정의됩니다. – Anders

+0

내 피들을 사용해 보셨습니까? –

0

그것의 더 나은 명시 적 ViewModels를 만든 다음과 같이 부모를 확인하기 위해 id를 추가했다 내가 내 프로젝트에서 한

ViewModel = function(data) { 
    this.value = ko.observable().extend({ required: true }); 
    ko.mapping.fromJS(this, {}, data); 
}; 
+0

이 문제를 설명하기위한 아주 단순한 예이다. 필자는 필드가 동적으로 생성되므로이 값을 명시 적으로 확장 할 수 없습니다. – Ian