2014-05-09 5 views
1

다음과 같은 문제가 있습니다. 그 나쁜쪽으로 나의 나쁜 영어를 유감스럽게 생각한다.SAP UI5 Json 모델 개수

jsonfile을 읽고 그 안에있는 사람 수를 계산하고 싶습니다. 이 결과는 변수에 쓰게됩니다.이 변수는 TileContainer에 연결됩니다. 그래서 내 Json 파일에 새 항목을 쓸 때 TileContainer 번호가 증가되도록하고 싶습니다. 여기

내 Company.json 파일에서 내 코드 : 나는 변수 XYZ는 길이 값을 얻을 수 있음을 원하는

onInit: function() { 

     this.getView().addDelegate({onBeforeShow: function(evt) { 
     if (this.direction != "back") { 
      var model = new sap.ui.model.json.JSONModel(); 
      model.loadData("JsonModels/Company.json"); 
      alert(model.getJSON()); 
      var XYZ; 

      var jsonModel = 
          { 
           "Tiles":[ 
           {"Tile": 
           { id : "idModelTile1", 
            title : "Mitarbeiter", 
            info: "Mitarbeiterdaten", 
            icon:"sap-icon://company-view", 
            activeIcon:"inbox", 
            number: XYZ, 
            appto: "idListPage" 
            //numberUnit: "positions" 
            }, 
           }, ...... 

내 controller.js에

{ 
        "mitarbeiter": [   

        { "Lastname": "Mustermann", 
         "Firstname": "Max", 
         "icon": "sap-icon://globe", 
         "adress": "Essen", 
         "geschlecht": "männlich", 
         "plz": "42222", 
         "street": "Viehoferplatz 11", 
         "jobinfo": "Softwareentwickler" 
        }, 
        { "Lastname": "Fischer", 
         "Firstname": "Elke", 
         "icon": "sap-icon://globe", 
         "adress": "Hamburg", 
         "geschlecht": "weiblich", 
         "plz": "31441", 
         "street": "Am Fischmarkt 12", 
         "jobinfo": "Verwaltungsassistentin" 
        }, 
        { "Lastname": "Mustermann", 
         "Firstname": "Heike", 
         "icon": "sap-icon://globe", 
         "adress": "Essen", 
         "geschlecht": "weiblich", 
         "plz": "42222", 
         "street": "Viehoferplatz 11", 
         "jobinfo": "Vorstandsvorsitzende" 
        } 

        ] 

}

필요입니다 TileContainer가 렌더링됩니다. 그래서 회사 - 고용 인원수는 Selectionscreen View에서 제공됩니다.

희망 좀 도와주세요. 나는 jquery와 함께 구현하지만 실제로는 아무 문제가 없다. 배열의 길이 속성을 읽을 수 있기 때문에

친애하는, 기독교

답변

0

, 당신은 단순히

var XYZ = model.getProperty("/mitarbeiter/length"); 

편집을 사용할 수 있습니다 여기에 내가 아래

onInit: function() { 
    jQuery.ajax({ 
     url: "JsonModels/Company.json", 
     dataType: "json", 
     success: function(data, textStatus, jqXHR) { 
      var mitarbeiterCount = data.length; 
      var oTileModel = new sap.ui.model.json.JSONModel(); 
      oTileModel.setData({ 
       tiles :[{ 
        tile : { 
         id  : "idModelTile1", 
         title  : "Mitarbeiter", 
         info  : "Mitarbeiterdaten", 
         icon  :"sap-icon://company-view", 
         activeIcon:"inbox", 
         number : mitarbeiterCount, 
         appto  : "idListPage" 
        }, 
       }] 
      }); 
      sap.ui.getCore().setModel(oTileModel); 
     }, 
     error: function(jqXHR, textStatus, errorThrown) { 
      alert("Oh no, an error occurred"); 
     } 
    }); 
} 
을 준 주석에 대한 코드 예제

보기에서 타일의 번호 속성을 바인딩하면 자동으로 작동합니다 :

데이터 바인딩의 힘을 사용하여 내가
alert(model.getProperty("/mitarbeiter/length")); 

내가 경고 메시지 "정의"를 얻을 추가
var oTileTemplate = new sap.m.StandardTile({ 
    icon  : "{icon}", 
    number : "{number}", 
    numberUnit: "mitarbeiter", 
    title  : "{title}", 
    info  : "{info}" 
}); 

var oTileContainer = new sap.m.TileContainer().bindAggregation("tiles", "/", oTileTemplate); 

//Etc... 
+1

그것은 비동기의주의를 기울여야한다, 여기에 해답의 열쇠입니다 @Qualiture가 지적한 바와 같이 자연. – qmacro

0

...

+0

데이터가 비동기 적으로로드되고 속성이 아직 존재하지 않기 때문입니다. 'async' 속성을 true로 설정하거나 https://sapui5.netweaver.ondemand.com/sdk/docs/api/symbols/sap.ui.model.json.JSONModel.html#loadData로 설정하거나 더 나은 방법으로 표준'jQuery.ajax' 호출을 사용하고 XYZ 변수와 ajax 성공 핸들러의 model.setData를 모두 설정합니다. – Qualiture

+0

jQuery.ajax의 문제점은 TileContainer가 렌더링 된 것 등입니다.이 배열의 길이가 호출됩니다 (호출 될 수 있음). 잘못된 단어). 따라서 TileContainer는 어떤 숫자도 표시하지 않습니다. ( – user3620515

+0

제 동료가 말했듯이 "XYZ 변수와 a.axData를 ajax success handler에서 모두 설정 했어도 상관 없습니다." 데이터 바인딩은 모든 것을 해결합니다. "나는 원래 예제를 mu 코드 예제로 업데이트 할 것입니다. – Qualiture

관련 문제