2013-06-03 1 views
0

typescript와 함께 breeze로 연주하고 있습니다.데이터 속성을 사용하는 addentitytype 배열이 작동하지 않습니다.

var eto = <breeze.EntityTypeOptions>new Object(); 
    eto.shortName = "type1"; 
    eto.namespace = "mod1"; 
    eto.dataProperties = new Array(); 
    eto.autoGeneratedKeyType = breeze.AutoGeneratedKeyType.Identity; 

    var dpo = <breeze.DataPropertyOptions>new Object(); 
    dpo.name = "id"; 
    dpo.dataType = breeze.DataType.Int32; 
    dpo.isNullable = false; 
    dpo.isPartOfKey = true; 

    var dp = new breeze.DataProperty(dpo); 
    eto.dataProperties.push(dp); 

    dpo = <breeze.DataPropertyOptions>new Object(); 
    dpo.name = "prop1"; 
    dpo.dataType = breeze.DataType.Int32; 
    dpo.isNullable = false; 
    dpo.isPartOfKey = false; 

    dp = new breeze.DataProperty(dpo); 
    eto.dataProperties.push(dp);    

    var et = new breeze.EntityType(eto); 
    store.addEntityType(et); 
    store.registerEntityTypeCtor(et.shortName, type1); 

그러나 다음 줄은 실패 : 나는 다음과 같은 타이프 스크립트 코드를 사용하여 유형을 만들려고하고있는 "dataProperties는"배열 인 경우에 문제가있는 것처럼

store.addEntityType(et); 

이 같이 보입니다 경우 대신 객체의 ... 내가 뭔가 잘못하고있는 중이 야 의심 그래서 난 자바 스크립트 초보자입니다 ...하지만 내 의심의 위입니다 특별히 행 아래 바람 코드 :

  propObj.forEach(entityType.addProperty); 

은 addProperty 메소드의 구현이 "this"컨텍스트를 사용하기 때문에 절대로 작동하지 않을 것입니다. 다시 한번 말하지만, 나는 틀린 것 같습니다. 어떤 경우에는 somone이 저에게 손을 줄 수 있다면 감사 할 것입니다. 당신에게 감사

// Used by both ComplexType and EntityType 
    function addProperties(entityType, propObj, ctor) { 

     if (!propObj) return; 
     if (Array.isArray(propObj)) { 
      propObj.forEach(entityType.addProperty); 
     } else if (typeof (propObj) === 'object') { 
      for (var key in propObj) { 
       if (__hasOwnProperty(propObj, key)) { 
        var value = propObj[key]; 
        value.name = key; 
        var prop = new ctor(value); 
        entityType.addProperty(prop); 
       } 
      } 
     } else { 
      throw new Error("The 'dataProperties' or 'navigationProperties' values must   be either an array of data/nav properties or an object where each property defines a data/nav property"); 
     } 
    } 

답변

0

편집 : 가능한 지금이 V 1.3.5의로 수정되었습니다.


좋아, 이것은 버그이며, 오늘 또는 내일에 나가는 릴리스에서 수정 될 것입니다. 찾아서보고 해 주셔서 감사합니다. :)

그 동안 간단한 해결 방법이 있습니다. 속성을 추가하기 전에 EntityType을 만듭니다. 즉 (TypeScript 대신 원시 js를 사용하지만 아이디어를 얻을 수 있습니다.)

var eto = {} 
    eto.shortName = "type1"; 
    eto.namespace = "mod1"; 
    eto.dataProperties = new Array(); 
    eto.autoGeneratedKeyType = breeze.AutoGeneratedKeyType.Identity; 
    var et = new breeze.EntityType(eto); 

    var dpo = {}; 
    dpo.name = "id"; 
    dpo.dataType = breeze.DataType.Int32; 
    dpo.isNullable = false; 
    dpo.isPartOfKey = true; 

    var dp = new breeze.DataProperty(dpo); 
    et.addProperty(dp); 

    dpo = {}; 
    dpo.name = "prop1"; 
    dpo.dataType = breeze.DataType.Int32; 
    dpo.isNullable = false; 
    dpo.isPartOfKey = false; 

    dp = new breeze.DataProperty(dpo); 
    et.addProperty(dp); 

    store.addEntityType(et); 
관련 문제