Перейдите к тому же представлению, но с другими параметрами

Я пытаюсь создать приложение панели запуска, используя список плиток, проблема в том, что когда я нажимаю на плитку, это может быть приложение, затем я перехожу к URL-адресу приложения, или это может быть группа приложений или другие группы, чем мне нужно для перехода к тому же виду панели запуска, но с новым списком плиток. На данный момент я просто хочу перейти к тому же представлению, когда я щелкаю плитку и делаю это с переходом между слайдами, но если я создаю маршрут с той же целью маршрута по умолчанию, представление не отображается, когда я запускаю приложение, он работает только в том случае, если я обслуживаю цель маршрута при создании другой цели с тем же именем представления.

где часть моего манифеста:

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

А сейчас это контроллер моего представления TileGroup.

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

С этим кодом я думаю, что навигация работает, потому что URL-адрес приложения изменяется, когда я нажимаю на плитку, но представление не меняется.


person Guto    schedule 16.08.2016    source источник


Ответы (1)


Если вы видите, что URL-адрес изменяется, значит, первая часть решения готова. Единственное, что вы не должны переходить к новой цели. Вместо этого вам следует перейти к той же цели, но передать другой идентификатор группы плиток, используя второй параметр метода navTo, например:

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

Вторая часть включает в себя получение события в вашем контроллере всякий раз, когда изменяется URL-адрес, чтобы вы могли действовать в соответствии с изменением.

Чтобы уловить идентификатор, переданный с помощью метода navTo, вы должны соответствующим образом изменить шаблон маршрута в своем манифесте, например:

"pattern": "tiles/:group:"

tiles указывает фиксированную часть вашего URL-адреса, а :group: указывает необязательный параметр, называемый group. Если вы хотите сделать это из рута (я думаю, это то, что вы планировали сделать), это должно быть

"pattern": ":group:"

Чтобы сообщить маршрутизатору, что вы хотите, чтобы он запускался при изменении URL-адреса, вы можете установить обратный вызов. Вы можете сделать это, вставив приведенный ниже код в обработчик onInit вашего контроллера:

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

Когда это находится в вашем обработчике onInit, обработчик _onPatternMatched вызывается при изменении URL-адреса, который включает цель group. Последнее полезно, иначе ваш метод будет запускаться при каждом изменении URL-адреса, даже если представление, связанное с вашим контроллером, не отображается.

Используя метод _onPatternMatched, вы должны прочитать, какой идентификатор группы должен отображаться, чтобы вы могли изменить плитки. Вы можете сделать это, прочитав параметр arguments из параметра события:

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

Основы маршрутизации очень хорошо объясняются в UI5 walk-through шаг 31, 32 и 33. Обратите особое внимание на часть 32, в которой объясняется маршрутизация с параметрами.

person jpenninkhof    schedule 17.08.2016
comment
Спасибо, я не скажу, что это работает, потому что мы решили просто фильтровать список плиток, когда пользователь нажимает на плитку, но большое спасибо за вашу помощь. - person Guto; 17.08.2016
comment
@Guto Уверен, вы найдете приложение, в котором вам нужно будет сделать это снова. Так что получение этих знаний определенно не потеря. - person jpenninkhof; 18.08.2016
comment
@jpenninkhof Есть идеи, как я могу заставить View быть отдельно создан для каждого маршрута / цели? - person cschuff; 08.02.2017