2013-11-27 2 views
3

빠른 회귀 테스트를 위해 모든 KendoUI 항목이 올바르게 구성되고 초기화되었는지 확인할 방법을 찾고 있습니다. 비 기존의검도 UI 값 바인딩 오류 감지

  • 소스 결합 : 값 결합 경로가 정말 다음 예제 즉 모델에 존재하지 않을 때 나는 상황을 감지 할 수없는 경우

    나는 문제에 직면 그러므로 내가 보장 할 수없는있다 - 재산 data-bind="source: AnotherNonExistingProp" 오류 Uncaught TypeError: Cannot read property 'parent' of undefined (그래서 콘솔에서이를 감지 할 수 있습니다)

  • 그러나, 값 결합 하지 던져 오류가 않습니다 존재하지 않는 특성 data-bind='value: Details.NonExistingProp'를 던졌습니다 회귀.

HTML :

<form> 
    <div> 
     <label>Name<label> 
     <input data-bind='value: Name' type='text' /> 
    </div> 
    <div> 
     <label>Age<label> 
     <input data-bind='value: Details.NonExistingProp' type='text' /> 
    </div> 
     <table border='1px' data-template="row-template" data-bind="source: anotherNonExistingProp"> 
     </table> 
    </form> 

자바 스크립트 :

<script type='text/javascript'> 
    $(function() {  
    var carModel = kendo.observable({ 
     Name: 'CarName', 
     Details: { 
      Age: 25 
     }, 
     Parts: [{PartName:'aa'}, 
       {PartName:'bb'}] 
    }); 
     kendo.bind($('form'), carModel);  
    }) 
</script> 

값 결합이 존재하지 않는 경로를 사용할 때 상황을 감지 할 수있는 방법이 있나요 (즉 재산에 의해 대상 경로가 정의되지 않았습니다)? 당신이 모두를 얻고 싶다면 여기

라이브 jsFiddle example

답변

3

당신은 항상 관찰에 변경 이벤트에 결합하고, 속성의 개체를 확인하실 수 있습니다 ...

viewModel.bind("change", function(e) { 
    if (this[e.field] === undefined) { 
    console.error("The field " + e.field + " cannot be bound because it doesn't exist"); 
    } 
}); 

당신의 관찰 할 수있는 객체를 한 번에 가져 오면 관찰 가능한 루트 객체를 잡고 변경할 수 있습니다.

면책 조항 : MVVM은 미세 조정 시스템입니다. 당신이 그것의 기능을 가로 채고 이것을 체크한다면 당신은 그것을 느리게 할 것입니다. 이것은 또한 검도 UI 팀이 공식적으로 지원할 내용이 아닙니다. 귀하의 마일리지는 다를 수 있습니다. http://jsbin.com/amOSejUy/1/edit

+0

감사합니다! 두 번째 방법은 시원합니다. 나는 성능에 대해별로 걱정하지 않는다. 왜냐하면 나는 이것을 통합 테스트 환경에서만 실행할 것이기 때문이다. – Isantipov

2

kendo.observable = function(object) { 
    if (!(object instanceof kendo.data.ObservableObject)) { 
    object = new kendo.data.ObservableObject(object); 
    // add a get binding on all observables 
    object.bind("get", function(e) { 
     if (this[e.field] === undefined) { 
     console.error("Cannot bind to the field '" + e.field + "' because it does not exist"); 
     } 
    }); 
    } 

    return object; 
}; 

나는 중첩 된 객체와 함께 작동하도록 위의 코드 (@Burke 네덜란드)에 약간의 변화를 사용 :

kendo.observable = function (object) { 
     if (!(object instanceof kendo.data.ObservableObject)) { 
      object = new kendo.data.ObservableObject(object); 
      // add a get binding on all observables 
      object.bind("get", function (e) { 
       var splitFields = e.field.split('.'); 
       var nestObj = this; 
       for (var i = 0; i < splitFields.length; i++) { 
        nestObj = nestObj[splitFields[i]];   
       } 
       if (nestObj === undefined) { 
        console.error("Cannot bind to the field '" + e.field + "' because it does not exist"); 
       } 
      }); 
     } 

     return object; 
    }; 
+0

감사합니다! 이것은 좋은 일이다 :-) – Roberto