
Project structure
{
"products": [
{"kind":"Food", "article":"Meet"}
, {"kind":"Food", "article":"Choclate"}
, {"kind":"Food", "article":"Cookie"}
, {"kind":"Beverage", "article":"Wine"}
, {"kind":"Beverage", "article":"Coke"}
, {"kind":"Beverage", "article":"Beer"}
]
}
<List headerText="Products"
items="{/products}"
itemPress=".onItemPress">
<StandardListItem
title="{article}"
type="Active"/>
</List>
<HBox id="detail" class="sapUiLargeMargin"> </HBox>
sap.ui.define([
"sap/ui/core/mvc/Controller",
"sap/ui/core/Fragment",
"sap/m/MessageToast",
"sapui5/module/fragmentCtrl/fragment/Food.controller",
"sapui5/module/fragmentCtrl/fragment/Beverage.controller"
], function (Controller,Fragment,MessageToast, FoodController, BeverageController) {
"use strict";
return Controller.extend("sapui5.module.fragmentCtrl.controller.Product", {
...
FragCtrl : {
Food: FoodController,
Beverage: BeverageController
}
});
});
aFragment : [],
onItemPress: function(oEvent){
var _oItem = oEvent.getParameter("listItem");
var _oCtx = _oItem.getBindingContext();
var _sKind = _oCtx.getProperty("kind")
var _sPath = _oCtx.getPath()
var _fragment = this.aFragment[_sKind];
if(!_fragment){
let _oCtrl = new this.FragCtrl[_sKind](this);
_fragment = Fragment.load({
id:"idFragment",
name: "sapui5.module.fragmentCtrl.fragment."+_sKind,
controller: _oCtrl
});
this.aFragment[_sKind] = _fragment;
};
_fragment.then((oFragment)=>{
var _oContainer = this.getView().byId("detail");
_oContainer.removeAllItems();
oFragment.bindElement(_sPath);
_oContainer.addItem(oFragment)
})
}
sap.ui.define([
"sap/ui/base/Object",
"sap/m/MessageToast",
], function (BaseObject,MessageToast) {
"use strict";
return BaseObject.extend("apui5.module.fragmentCtrl.fragment.Food.controller", {
constructor: function(pViewCtrl){
this.vc = pViewCtrl
},
onClick:function(oEvent){
MessageToast.show("click on Food Controller");
}
});
});
<core:FragmentDefinition xmlns:core="sap.ui.core"
xmlns="sap.m">
<VBox>
<Title level="H2" text="Welcome to your selected Food"/>
<Text text="{article}"/>
<Button text="which type ?" press=".onClick"/>
<Button text="which view ?" press=".vc.onClick"/>
</VBox>
</core:FragmentDefinition>
Food details with onPress of the fragment controller
Beverage details with onPress of the fragment controller
Beverage details with onPress of the product view controller
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
7 | |
7 | |
6 | |
5 | |
4 | |
4 | |
4 | |
4 | |
4 | |
3 |