Sapui5 如何为链接类型QuickViewGroupElement?;添加单击事件;
我有一个像这样的QuickView popover:Sapui5 如何为链接类型QuickViewGroupElement?;添加单击事件;,sapui5,popover,Sapui5,Popover,我有一个像这样的QuickView popover: <core:FragmentDefinition id="table_popover"> <QuickView id="popover_quickView"> <QuickViewPage id="popover_quickViewPage"> <QuickViewGroup id="popover_quickViewGroup"> <QuickVi
<core:FragmentDefinition id="table_popover">
<QuickView id="popover_quickView">
<QuickViewPage id="popover_quickViewPage">
<QuickViewGroup id="popover_quickViewGroup">
<QuickViewGroupElement
id="nav_link"
type="link"
value="navTo somePage" />
</QuickViewGroup>
</QuickViewPage>
</QuickView>
</core:FragmentDefinition>
但是发现QuickViewGroupElement
没有扩展sap.ui.core.Control
,所以不要借用attachBrowserEvent
所以,我唯一的选择就是在vanilla js中使用addEventListener
,或者在jQuery中使用?还有其他的UI5方式吗
如果jQuery变通方法不起作用,UI5和DOM中的QuickViewGroupElement
id不相同,如下所示:
QuickView
的唯一ID非常奇怪,我在github中为UI5创建了一个问题:
用户界面:
是的,这是一件复杂的事情。这是你可以尝试的
我已将afterOpen
事件附加到函数quickViewOpen
然后我查询具有链接类型的页面和组元素。
接下来,我使用jquery查找链接以附加click事件
MVC
sap.ui.define([
“jquery.sap.global”,
“sap/ui/core/mvc/Controller”,
'sap/ui/model/json/JSONModel'
],函数(jQuery、控制器、JSONModel){
“严格使用”;
var oController=Controller.extend(“myView.Template”{
openQuickView:函数(oEvent){
var quickview=this.getView().byId(“popover_quickview”);
openBy(oEvent.getSource());
},
quickViewOpen:函数(){
var fn=this.quickViewLinkClick;//事件句柄
var oQuickView=this.getView().byId(“popover_quickView”);
//获取链接元素,以便我们可以将这些值与链接单击关联
var linkElements=oQuickView.getPages()[0].getGroups()[0].getElements().filter(函数(e){
返回e.getType()=='link';
});
//使用jquery查找链接并在单击事件时附加
this.getView().byId(“popover_quickView”).$().find(“a.sapMLnk”).each(函数(i,e){
var elm=连接元素[i];
$(e)。单击(函数(){
fn(elm);
});
});
},
quickViewLinkClick:函数(elm){
log(elm.getValue());
}
});
返回控制器;
});
var oView=sap.ui.xmlview({
viewContent:jQuery('#oView').html()
});
oView.placeAt(“内容”);
解决1@IO问题:
使用Popover+表单+链接模拟QuickView
在2@D.Seah附近工作:
UI团队已批准将此作为一个项目
我还发现QuickViewGroupElement
不支持启用
。所以Link
是一个更好的选择
在3点左右工作
ResponsivePopover+QuickViewPage+链接
<ResponsivePopover
showHeader="true"
title="{entityPopoverModel>/name}"
class="sapUiPopupWithPadding" initialFocus="pin">
<content>
<!-- do not add QuickView container-->
<QuickViewPage header="{entityPopoverModel>/name}">
<QuickViewGroup>
<QuickViewGroupElement
label="{i18n>ID}"
value="{entityPopoverModel>/id}" />
<QuickViewGroupElement
label="{i18n>DESCRIPTION}"
value="{= ${entityPopoverModel>/description} ? ${entityPopoverModel>/description} : '-'}" />
</QuickViewGroup>
</QuickViewPage>
<Link text="hazard" press="onPress" enabled="false"/>
</content>
</ResponsivePopover>
您可以尝试,在那里您可以使用任何控件。我以前使用过ResponsivePopover
,但UX更喜欢QuickView
。我也尝试过使用ResponsivePopover
+页面
+SimpleForm
模拟快速查看
,但SimpleForm
没有显示在页面
中,这是另一个问题。如果可能,请分享UIUpdate@Inzio的屏幕截图,并与我分享您试图实现的UI。
var oView = this.getView();
var oLink = oView.byId("nav_link");
var sId = oLink.getId(); // "idFirstPage1--nav_link"
// get nothing
var jQueryLink = $("#" + sId);
var vanillaLink = document.getElementById("document.getElementById("idFirstPage1--nav_link")")
// returns link element, in real application, generated id might be __linkXXX
var realjQueryLink = $("__link0");
var realvanillaLink = document.getElementById("__link0");
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta charset="UTF-8">
<title>MVC</title>
<script id="sap-ui-bootstrap" type="text/javascript"
src="https://sapui5.hana.ondemand.com/resources/sap-ui-core.js"
data-sap-ui-theme="sap_bluecrystal"
data-sap-ui-libs="sap.m,sap.ui.table"
data-sap-ui-xx-bindingSyntax="complex">
</script>
<script id="oView" type="sapui5/xmlview">
<mvc:View height="100%" controllerName="myView.Template"
xmlns="sap.m"
xmlns:core="sap.ui.core"
xmlns:mvc="sap.ui.core.mvc">
<Button text="Click" press="openQuickView"></Button>
<QuickView id="popover_quickView" afterOpen="quickViewOpen">
<QuickViewPage id="popover_quickViewPage">
<QuickViewGroup id="popover_quickViewGroup">
<QuickViewGroupElement
id="nav_link"
type="link"
value="navTo somePage" />
<QuickViewGroupElement
id="nav_link2"
type="link"
value="navTo otherPage" />
</QuickViewGroup>
</QuickViewPage>
</QuickView>
</mvc:View>
</script>
<script>
sap.ui.define([
'jquery.sap.global',
'sap/ui/core/mvc/Controller',
'sap/ui/model/json/JSONModel'
], function(jQuery, Controller, JSONModel) {
"use strict";
var oController = Controller.extend("myView.Template", {
openQuickView: function(oEvent) {
var quickview = this.getView().byId("popover_quickView");
quickview.openBy(oEvent.getSource());
},
quickViewOpen: function() {
var fn = this.quickViewLinkClick; // event handle
var oQuickView = this.getView().byId("popover_quickView");
// get the link elements so that we can associate the values with the link click
var linkElements = oQuickView.getPages()[0].getGroups()[0].getElements().filter(function(e) {
return e.getType() === 'link';
});
// use jquery to look for the links and attach on click event
this.getView().byId("popover_quickView").$().find("a.sapMLnk").each(function(i, e) {
var elm = linkElements[i];
$(e).click(function() {
fn(elm);
});
});
},
quickViewLinkClick: function(elm) {
console.log(elm.getValue());
}
});
return oController;
});
var oView = sap.ui.xmlview({
viewContent: jQuery('#oView').html()
});
oView.placeAt('content');
</script>
</head>
<body class="sapUiBody" role="application">
<div id="content"></div>
</body>
</html>
var oQuickView = sap.ui.core.Fragment.byId("AssignedTablePopover", "common_quickView");
// unique id workaround
var oNavLink = jQuery.sap.byId(oQuickView.getId() + "-quickView-popover").find('a')[0];
jQuery.sap.byId(oNavLink.getAttribute('id')).click(function(e) {
});
<ResponsivePopover
showHeader="true"
title="{entityPopoverModel>/name}"
class="sapUiPopupWithPadding" initialFocus="pin">
<content>
<!-- do not add QuickView container-->
<QuickViewPage header="{entityPopoverModel>/name}">
<QuickViewGroup>
<QuickViewGroupElement
label="{i18n>ID}"
value="{entityPopoverModel>/id}" />
<QuickViewGroupElement
label="{i18n>DESCRIPTION}"
value="{= ${entityPopoverModel>/description} ? ${entityPopoverModel>/description} : '-'}" />
</QuickViewGroup>
</QuickViewPage>
<Link text="hazard" press="onPress" enabled="false"/>
</content>
</ResponsivePopover>