在SAP UI5中,当用户按下它时,我尝试获取绑定到表行的数据对象(在我的控制器中).我的视图在xml中定义,我的控制器当然在JS中.
我已经检查了如何在sap.m.table中获取行的内容,但它对我不起作用,或者缺少某些东西.
我的观点(相关部分):
<Panel>
<Table id="lineItemList" items="{
path: 'statusJobs>/jobs',
sorter: {
path: 'start',
descending: true
}
}">
<headerToolbar>
<!-- ... -->
</headerToolbar>
<columns>
<Column hAlign="Left" vAlign="Middle">
<Label text="Job" />
</Column>
<Column hAlign="Center" vAlign="Middle">
<Label text="Start" />
</Column>
<Column hAlign="Center" vAlign="Middle">
<Label text="End" />
</Column>
<Column hAlign="Right" vAlign="Middle">
<Label text="Success" />
</Column>
</columns>
<ColumnListItem
type="Navigation"
press=".handleLineItemPress"
>
<Text text="{statusJobs>job}" />
<Text text="{
path: 'statusJobs>start',
formatter:'util.Formatter.Date'}"
/>
<Text text="{
path: 'statusJobs>end',
formatter: 'util.Formatter.Date'}"
/>
<Text text="{statusJobs>status}"/>
</ColumnListItem>
</Table>
Run Code Online (Sandbox Code Playgroud)
这里的相关部分显然是: …
我在 XML 文件中的屏幕上有几个元素
<layout:VerticalLayout xmlns:layout="sap.ui.layout" xmlns="sap.m">
<Input />
<Button />
<!-- ... -->
</layout:VerticalLayout>
Run Code Online (Sandbox Code Playgroud)
如何添加布局重力或垂直对齐控件之类的内容?例如,我想要元素位于屏幕中央。
我在UI5应用程序的Component.js中声明了一个模型,如下所示
init: function() {
sap.ui.core.UIComponent.prototype.init.apply(this);
var oModel1 = new sap.ui.model.json.JSONModel("model/mock.json");
sap.ui.getCore().setModel(oModel1, "oModelForSales");
},
Run Code Online (Sandbox Code Playgroud)
但是无法onInit在控制器内部的任何方法中访问模型,除非在视图上设置模型,如下所示:
var oModel1 = new sap.ui.model.json.JSONModel("model/routes.json");
this.getView().setModel(oModel1);
Run Code Online (Sandbox Code Playgroud)
sap.ui.getCore().getModel("oModelForSales")控制器onInit中的日志显示模型为,undefined但我能够在onBeforeRendering处理程序中获取它.
为什么在Component.js中设置的核心模型无法访问onInit?
我正在使用sap.m.ObjectListItem我的列表项,我从API绑定了JSON数据.但是,当我按下某个项目时,我找不到从列表中获取所选项目的方法.即使获得该项目的关键也会有所帮助.
<List id="ObjectList"
itemPress=".onPressDcData"
items="{DC>/}"
>
<ObjectListItem
type="Active"
title="{DC>Name}"
/>
</List>
Run Code Online (Sandbox Code Playgroud) 我在 SAPUI5 应用程序中有一个 Detail 视图,其中包含一个 ID 的输入字段"bestellmenge_tu"。每当调用此视图时,焦点应位于该输入字段上。不幸的是,当在控制器的onInit方法中将焦点设置在字段上时,焦点将被设置,但几毫秒后 UI5 将其拿走并将其转移到详细信息视图的“导航返回”按钮。
通过将 alog.trace()放在输入字段的blur事件上,我发现焦点被一个sap.ui.define.NavContainer._afterTransitionCallback被调用的方法夺走了,该方法被异步调用(window.setTimeout触发器和执行之间的一些s)。该函数只是在视图中查找第一个可聚焦的元素,然后粗暴地将焦点切换到它上面。
我的解决方法是重新定义jQuery.fn.firstFocusableDomRef用于查找“第一个可聚焦元素”的方法:
// DIESE KANONE FUNKTIONIERT
jQuery.fn.firstFocusableDomRef = (function() {
var _default = jQuery.fn.firstFocusableDomRef;
return function() {
var bestellmenge_tu = document.querySelector("input[id$='bestellmenge_tu-inner']");
if (bestellmenge_tu &&
bestellmenge_tu.style.display !="none" &&
bestellmenge_tu.style.visibility != "hidden") return bestellmenge_tu;
else return _default.apply(this);
}
})();
Run Code Online (Sandbox Code Playgroud)
但这可能是一个性能问题(querySelector在此后的任何页面加载的DOM 横向期间调用),并且对于所需的效果来说代码太多。
有没有更简单的方法来实现这一目标?
我想到了类似的东西
<mvc:View controllerName="zrt_dispo.view.Detail"...>
<Page id="detailPage" initialFocus="bestellmenge_tu"> <!-- ID of the element to …Run Code Online (Sandbox Code Playgroud) 我有一个带有此视图的 UIComponent:
<mvc:View controllerName="my.components.webmap.controller.Map"
xmlns:mvc="sap.ui.core.mvc"
xmlns="sap.m"
xmlns:html="http://www.w3.org/1999/xhtml">
<html:div id='myDiv' style='height:inherit'></html:div>
<Button id="helloWorld" text="Say Hello" press=".onShowHello" />
</mvc:View>
Run Code Online (Sandbox Code Playgroud)
在视图控制器中,我可以从
this.getView().byId("helloWorld").sId
Run Code Online (Sandbox Code Playgroud)
但我无法使用该byId()方法获取 div 的 ID 。
<mvc:View controllerName="my.components.webmap.controller.Map"
xmlns:mvc="sap.ui.core.mvc"
xmlns="sap.m"
xmlns:html="http://www.w3.org/1999/xhtml">
<html:div id='myDiv' style='height:inherit'></html:div>
<Button id="helloWorld" text="Say Hello" press=".onShowHello" />
</mvc:View>
Run Code Online (Sandbox Code Playgroud)
如何获取 div 的 ID 以访问该元素?我需要 div 的 ID,所以我可以向它附加一些额外的 3rd 方控件。
我正在尝试绑定sap.m.Table中的项目(阻止使用Factory函数),我收到此错误:
缺少Element的聚合项的模板或工厂函数
我的观点如下:
<Table id="favTable">
<headerToolbar>
<Toolbar>
<Title id="tableHeader" text="{i18n>tableHeader}"/>
</Toolbar>
</headerToolbar>
<columns>
<Column>
<Label text="{i18n>serviceNameColText}" />
</Column>
<Column>
<Label text="{i18n>serviceTechNameColText}"/>
</Column>
<Column width="50px"/>
</columns>
<ColumnListItem>
<Text text="{Text}" />
<Text text="{Service}" />
<Button icon="sap-icon://delete" press="onDeleteRow" />
</ColumnListItem>
</Table>
Run Code Online (Sandbox Code Playgroud)
根据控制器代码(使用绑定的OData服务)尝试在命中路径后将项绑定到视图中:
_onPatternMatched: function(oEvent) {
let oTable = this.getView().byId(sIdTable);
// bind items dynamically with attributes
const sGroupId = oEvent.getParameter("arguments").Group;
let sBindingPath = "/DataSet(SetId='" + sSetId + "')"
oTable.bindItems({
path: sBindingPath,
parameters: {
navigation: {
FavoriteGroupSet: "ToFavorites"
}
},
filters: [
// new Filter("InstitutionId", …Run Code Online (Sandbox Code Playgroud) 在调用后尝试第二次打开对话框片段时,出现以下错误this._oDialog.destroy():
未捕获的类型错误:无法读取 null 的属性“setInitialFocusId”
我的问题就像这里提到的问题:How to clear dialog/xmlfragment content after close? 但是,解决方案显然只是“不要使用属性 setInitialFocus”,我没有在代码中的任何地方使用它。
openDialog: function() {
if (!this._oDialog) {
this._oDialog = sap.ui.xmlfragment("myFragmentPath", this);
this.getView().addDependent(this._oDialog);
}
this._oDialog.open();
},
onExit: function () {
if (this._oDialog) {
this._oDialog.destroy();
}
},
afterClose: function () {
if (this._oDialog) {
this._oDialog.destroy();
}
},
handleClose: function (oEvent) {
this._oDialog.close();
}
Run Code Online (Sandbox Code Playgroud)
openDialog: function() {
if (!this._oDialog) {
this._oDialog = sap.ui.xmlfragment("myFragmentPath", this);
this.getView().addDependent(this._oDialog);
}
this._oDialog.open();
},
onExit: function () {
if (this._oDialog) {
this._oDialog.destroy(); …Run Code Online (Sandbox Code Playgroud) 在 UI5 演示套件中,演练步骤 8(仍然)提到了以下内容:
为了安全起见,我们必须使用与控制器中类似的机制来使用资源包中的字符串并替换其中的一部分。这可以通过
jQuery.sap.formatMessage格式化程序来完成。
它可用于 XML 视图中带有占位符的可翻译文本,例如:
<Title text="{
parts: [
'i18n>overflowToolbarTitle',
'appView>/listItemCount'
],
formatter: 'jQuery.sap.formatMessage'
}" />
Run Code Online (Sandbox Code Playgroud)
但是,自 1.58 起jQuery.sap.formatMessage 已折旧,如果我改为使用建议的替代方案sap.base.strings.formatMessage,则会引发以下错误:
未找到格式化程序函数 sap.base.strings.formatMessage!
如何formatMessage在 XML 中使用新模块?
我有一个UI5-JSON-Model,并希望将其显示在树中。但我不想显示整个结构,而只显示一个子集。说我有以下模型:
{
"nodes": [
{
"text": "Leaf 1",
"additionalStuff": [
{
"element": "blue"
},
{
"element": "green"
}
]
},
{
"text": "Subtree",
"nodes": [
{
"text": "Leaf in Subtree"
}
]
},
{
"text": "Leaf 2"
}
]
}
Run Code Online (Sandbox Code Playgroud)
我想显示nodes和text,但不显示additionalStuff。但是我得到的图片如下:
我如何告诉树忽略additionalStuff?