SAPUI5 如何通过扩展现有控件创建自定义控件
SAPUI5 How to create a custom control by extending existing control
我必须自定义现有控件(FacetFilter)的功能。 我无法自定义 FacetFilter 渲染器的功能。 你能帮我吗?
我在 XML 中的代码是
<FacetFilter
id="idFacetFilter"
type="Simple"
showPersonalization="true"
showReset="true"
reset="handleFacetFilterReset"
lists="{/ProductCollectionStats/Filters}">
<lists>
<FacetFilterList
title="{type}"
key="{key}"
active="false"
multiselect="true"
listClose="handleListClose"
items="{values}" >
<items>
<FacetFilterItem
text="{text}"
key="{key}"
count="{data}" />
</items>
</FacetFilterList>
</lists>
</FacetFilter>
我试图扩展控制,我尝试的代码如下,
jQuery.sap.declare("control.CustomFacetFilter");
sap.m.FacetFilter.extend("control.CustomFacetFilter", {});
我只是扩展,因为我想要该控件的所有功能。 我不想修改任何东西。 我有渲染器文件如下。
/*
* @copyright
*/
sap.ui.define(['jquery.sap.global'],
function(jQuery) {
"use strict";
/**
* FacetFilter renderer.
* @namespace
*/
var CustomFacetFilterRenderer = {
};
/**
* Renders the HTML for the given control, using the provided {@link sap.ui.core.RenderManager}.
*
* @param {sap.ui.core.RenderManager} oRm the RenderManager that can be used for writing to the render output buffer
* @param {sap.ui.core.Control} oControl an object representation of the control that should be rendered
*/
CustomFacetFilterRenderer.render = function(oRm, oControl){
switch (oControl.getType()) {
case sap.m.FacetFilterType.Simple:
CustomFacetFilterRenderer.renderSimpleFlow(oRm, oControl);
break;
case sap.m.FacetFilterType.Light:
CustomFacetFilterRenderer.renderSummaryBar(oRm, oControl);
break;
}
};
/**
*
*
* @param {sap.ui.core.RenderManager} oRm the RenderManager that can be used for writing to the render output buffer
* @param {sap.ui.core.Control} oControl an object representation of the control that should be rendered
*/
CustomFacetFilterRenderer.renderSimpleFlow = function(oRm, oControl) {
oRm.write("<div");
oRm.writeControlData(oControl);
oRm.addClass("sapMFF");
if (oControl.getShowSummaryBar()) {
oRm.write(">");
CustomFacetFilterRenderer.renderSummaryBar(oRm, oControl);
} else {
if (oControl._lastScrolling) {
oRm.addClass("sapMFFScrolling");
} else {
oRm.addClass("sapMFFNoScrolling");
}
if (oControl.getShowReset()) {
oRm.addClass("sapMFFResetSpacer");
}
oRm.writeClasses();
oRm.write(">");
if (sap.ui.Device.system.desktop) {
oRm.renderControl(oControl._getScrollingArrow("left"));
}
/* // dummy after focusable area.
oRm.write("<div tabindex='-1'");
oRm.writeAttribute("id", oControl.getId() + "-before");
oRm.write("></div>");*/
// Render the div for the carousel
oRm.write("<div");
oRm.writeAttribute("id", oControl.getId() + "-head");
oRm.addClass("sapMFFHead");
oRm.writeClasses();
oRm.write(">");
var aLists = oControl._getSequencedLists();
for (var i = 0; i < aLists.length; i++) {
oRm.renderControl(oControl._getButtonForList(aLists[i]));
if (oControl.getShowPersonalization()) {
oRm.renderControl(oControl._getFacetRemoveIcon(aLists[i]));
}
}
if (oControl.getShowPersonalization()) {
oRm.renderControl(oControl.getAggregation("addFacetButton"));
}
oRm.write("</div>"); // Close carousel div
if (sap.ui.Device.system.desktop) {
oRm.renderControl(oControl._getScrollingArrow("right"));
}
if (oControl.getShowReset()) {
oRm.write("<div");
oRm.addClass("sapMFFResetDiv");
oRm.writeClasses();
oRm.write(">");
oRm.renderControl(oControl.getAggregation("resetButton"));
oRm.write("</div>");
}
}
oRm.write("</div>");
};
/**
*
*
* @param {sap.ui.core.RenderManager} oRm the RenderManager that can be used for writing to the render output buffer
* @param {sap.ui.core.Control} oControl an object representation of the control that should be rendered
*/
CustomFacetFilterRenderer.renderSummaryBar = function(oRm, oControl) {
// We cannot just render the toolbar without the parent div. Otherwise it is
// not possible to switch type from light to simple.
oRm.write("<div");
oRm.writeControlData(oControl);
oRm.addClass("sapMFF");
oRm.writeClasses();
oRm.write(">");
var oSummaryBar = oControl.getAggregation("summaryBar");
oRm.renderControl(oSummaryBar);
oRm.write("</div>");
};
return CustomFacetFilterRenderer;
}, /* bExport= */ true);
我只是复制粘贴的代码,我在渲染器中修改了代码当我运行此代码时,找不到它的显示列表.js,但这里的列表是 FacetFilter 中的聚合。如果我们在 xml 中观察到,FacetFilter 是最顶级的父级,它有一个子项(FacetFilterList),而子项又具有另一个子项(FacetFilterItem)。我已经在这里扩展了控件 FacetFilter,这意味着我将 FacetFilter 的所有属性都带到了我的 CustromFilter 中,但它的显示列表.js仍然找不到。我混淆了如何在这种情况下创建自定义控件,您能否帮助我。
sap.ui.define(['./HerePathToFacetFilterRenderer', 'sap/ui/core/Renderer'],
function(FacetFilterRenderer, Renderer) {
"use strict";
var CustomFacetFilterRenderer = Renderer.extend(FacetFilterRenderer);
//... here your custom implementation, overwrite of base methods or hooks
return CustomFacetFilterRenderer;
}, /* bExport= */ true);
请参阅从 InputBase 继承的文本区域呈现器https://github.com/SAP/openui5/blob/master/src/sap.m/src/sap/m/TextAreaRenderer.js
实际上docu 应该通过另一种扩展现有控件的方法提供更多帮助https://openui5.hana.ondemand.com/#docs/guide/bcee26a4801748f39bf5698d83d903aa.html
相关文章:
- 创建一个方法,通过一个窗口进行迭代并获取Titanium中的所有控件
- 在angularjs中创建自定义控件的推荐方法
- 创建服务器控件.创建问题
- 如何在asp.net中获取动态创建的文本框web控件的值
- 如何在reactjs中创建仅输入控件
- 在Javascript中创建自定义的可重用控件(Kendo UI)
- 动态创建控件时如何使用.data()
- 在JavaScript和HTML中创建intellisense类型控件
- C#WebBrowser控件-使用DOM创建和修改javascript变量,然后使用Applet读取它
- 为多个操作创建ASCX控件
- FindControl无法使用动态创建的控件
- 将动态创建的ASP.NET控件传递给Javascript
- 是否可以在 asp.net 中使用 JavaScript 创建服务器端列表框控件
- Javascript 循环未正确创建 jquery 控件
- 如何在客户端函数行中创建的 RadGrid 的命令项模板中查找控件
- 为动态控件创建 JavaScript
- asp:LinkButton通过文字控件创建,不会在后面触发代码
- 如何为ASP.NET用户控件创建客户端API
- SAPUI5 如何通过扩展现有控件创建自定义控件
- 如何使用键盘控件创建切换按钮