2016-08-16 6 views
2

타일 목록을 사용하여 런치 패드 앱을 만들려고합니다. 문제는 타일을 클릭하면 앱이 될 수 있고 앱 URL 또는 런치 패드의 동일한보기로 이동해야하지만 새로운 타일 목록으로 이동해야하는 것보다 많은 그룹의 앱 또는 다른 그룹이 될 수 있습니다. 지금은 타일을 클릭하고 슬라이드 전환으로 할 때 같은보기로 이동하기를 원하지만 동일한 기본 경로 대상을 가진 경로를 만들면 응용 프로그램을 시작할 때보기가 렌더링되지 않습니다. 동일한보기 이름을 가진 다른 대상을 만들 때 경로의 대상을 지정하는 경우에만 작동합니다. 여기같은보기이지만 다른 매개 변수로 이동

"routes": [ 
     { 
      "pattern": "", 
      "name": "group", 
      "target": "group" 
     }, 
     { 
      "pattern": "group", 
      "name": "group2", 
      "target": "group2" 
     } 
     ], 
     "targets": { 
     "group": { 
      "viewName": "TileGroup", 
      "viewLevel" : 1 
     }, 
     "group2": { 
      "viewName": "TileGroup", 
      "viewLevel" : 2 
     } 
     } 
    } 

ANS 지금은 내 TileGroup보기의 컨트롤러 : 내 매니페스트의 일부

.

내가 응용 프로그램 변경의 URL이 나는 타일을 클릭하면되지만 뷰가 변경되지 않기 때문에 네비게이션이 작동하고 있다고 생각이 코드

sap.ui.define([ 
 
    "sap/ui/core/UIComponent" 
 
], 
 
sap.ui.controller("pelissari.soficom.launchpad.controller.TileGroup", { 
 
\t onInit: function() { 
 
\t \t var oModel = new sap.ui.model.json.JSONModel(); 
 
    \t \t oModel.loadData("./model/data.json"); 
 
    \t \t this.getView().setModel(oModel); 
 
\t \t 
 
\t }, 
 
\t \t onPress: function (oEvent) { 
 
\t \t \t var oRouter = sap.ui.core.UIComponent.getRouterFor(this); 
 
\t \t \t oRouter.navTo("group2"); 
 
\t \t } 
 
\t }));
.

답변

5

URL이 변경되면 솔루션의 첫 번째 부분을 준비 할 수 있습니다. 유일한 것은 새로운 대상으로 이동해서는 안된다는 것입니다. 대신, 동일한 대상으로 이동하지만, navTo 방법, 예를 들면의 두 번째 매개 변수를 사용하여 다른 tilegroup 식별자를 통과해야합니다

oRouter.navTo("tileView", {group: "group1"}); 

두 번째 부분은 이벤트가 때마다 URL 변경 컨트롤러에서 제기하기 포함, 그래서 당신은 변화에 따라 행동 할 수 있습니다. :group:라는 선택적 매개 변수를 지정하면서,

"pattern": "tiles/:group:" 

tiles이 URL의 고정 부분을 나타냅니다

navTo 방법을 사용하여 전달 된 ID를 잡기 위해, 당신은 예를 들어, 그에 따라 매니페스트에 경로 패턴을 변경해야합니다 group. 루트에서이 작업을 수행하려면, 그것은

"pattern": ":group:" 

당신이 URL 변경, 전화를 설정할 수 있습니다 때 트리거 취득하고자하는 라우터를 통보하는 것 (그게 당신이 할 계획 무엇을 생각) -뒤로. 당신은 당신의 컨트롤러의 onInit 핸들러에 아래 코드를 삽입하여 수행 할 수 있습니다 :

var oRouter = sap.ui.core.UIComponent.getRouterFor(this); 
oRouter.getRoute("group").attachPatternMatched(this._onPatternMatched, this); 

을이 대상 group을 포함하는 URL의 변화가 있었다 때 _onPatternMatched 핸들러가 호출되고, 당신의 onInit 처리기에있을 때. 후자는 유용합니다. 그렇지 않으면 컨트롤러에 연결된보기가 보이지 않더라도 모든 URL 변경에 대해 메소드가 트리거됩니다.

_onPatternMatched 메서드에서 타일을 변경할 수 있도록 그룹 ID가 표시되어야하는 것을 다시 읽어야합니다. 당신은 이벤트 매개 변수에서 arguments 매개 변수를 읽어하여이 작업을 수행 할 수 있습니다 : 라우팅

_onObjectMatched : function (oEvent) { 
    var groupId = oEvent.getParameter("arguments").group; 
    console.log("Group ID: " + groupId); 
}, 

필수 아주 잘 UI5 walk-through 단계 31, 3233에 설명되어 있습니다.특히 매개 변수를 사용한 라우팅을 설명하는 제 32 부에 유의하십시오.

+0

감사합니다. 사용자가 타일을 눌러도 타일 목록을 필터링하기로 결정했기 때문에 작동하지 않습니다.하지만 도움을 많이 주셔서 감사합니다. – Guto

+1

@Guto 당신이 다시 할 필요가있는 앱을 접하게 될 것입니다. 이렇게이 지식을 얻는 것은 확실히 손실이 아닙니다. – jpenninkhof

+0

사실, 다시 한 번 감사드립니다. – Guto

관련 문제