SAPUI5 ValueHelpDialog 单元格为空
SAPUI5 ValueHelpDialog Cells Empty
我对编码和 Whosebug 还很陌生。我正在尝试创建一个 sapui5 值帮助对话框 (class sap.ui.comp.valuehelpdialog.ValueHelpDialog
),它应该最终过滤来自 SAP 后端服务中用户 table 的搜索请求。
现在,我什至无法让它正确显示我的模拟数据。模拟数据由一个 "Personen.json" 和一组用户组成,这些用户具有以下字段,例如此示例片段:
[{
"BewId": "2123456789",
"Posno": 1,
"PNumber": "P87879876",
"Firstname": "Heinz",
"Company": "Some company",
"IsIntern": true,
"Lastname": "Wolff"
}, {
"BewId": "2123456789",
"Posno": 2,
"PNumber": "P23498711",
"Firstname": "Karl",
"Company": "some company",
"IsIntern": true,
"Lastname": "Schmidt"
}]
我几乎尝试了所有我能想到的方法:
- 在单元格的文本字段中放置文字值而不是绑定。
- 使用
getTableAsync().then
代替 getTable()
。
- 各种不同的路径,包括整个文件夹树的完整路径和
/Personen
(我认为 JSON 的当前结构没有意义)。
- 使用
bindRows()
而不是 bindAggregation()
。
- 用
sap.m.Table
而不是 sap.ui.table.Table
在根视图上创建一个正常的 table (据我所知,这是 ValueHelpDialog 内部 table 的类型可以说)。这显示数据没有问题。
- 更改我的 Personen.json 的语法以在其中包含一个集合
Personen
并在绑定函数中将路径更改为 /Personen
。
- Following the example from the sample 尽可能接近。
用 addColumn()
在控制器中定义列结构,而不是像我现在这样在模型中定义它:
"columnModel.json"
{cols": [
{
"label": "{i18n>pNumber}",
"template": "{PNumber}"
},
{
"label": "{i18n>firstname}",
"template": "{Firstname}"
},
{
"label": "{i18n>lastname}",
"template": "{Lastname}"
}]}
Bellow 是我的主视图控制器中按下帮助值的事件处理函数:
handleValueHelp: function () {
var oColModel = this.getView().getModel("columnsModel");
var oUserModel = this.getView().getModel("userModel");
this._oValueHelpDialog = sap.ui.xmlfragment("appName.view.ValueHelpPopover", this);
this.getView().addDependent(this._oValueHelpDialog);
var oTable = this._oValueHelpDialog.getTable();
oTable.setModel(oUserModel);
oTable.setModel(oColModel, "columns");
var oTemplate = new sap.m.ColumnListItem({
type: sap.m.ListType.Active,
cells: [
new sap.m.Label({
text: "{PNumber}"
}),
new sap.m.Label({
text: "{Firstname}"
}),
new sap.m.Label({
text: "{Lastname}"
})
]
});
if (oTable.bindRows) {
oTable.bindAggregation("rows", "/");
}
if (oTable.bindItems) {
oTable.bindAggregation("items", "/", oTemplate);
}
this._oValueHelpDialog.update();
this._oValueHelpDialog.open();
}
我的 XML ValueHelpDialog 视图片段:
"ValueHelpPopover.fragment.xml"
<core:FragmentDefinition xmlns:vhd="sap.ui.comp.valuehelpdialog" xmlns:core="sap.ui.core" xmlns="sap.m">
<vhd:ValueHelpDialog id="valueHelp" title="{i18n>valueHelpTitle}" ok=".onValueHelpOkPress" cancel=".onValueHelpCancelPress"
afterClose=".onValueHelpAfterClose" key="Firstname" descriptionKey="Lastname"></vhd:ValueHelpDialog>
目前,我没有收到任何错误消息,但我收到了以下输出:https://ibb.co/q58sk1V
当我 select 这些行时,我可以从键中看出它们是来自我的模拟 json odata 模型的对象,但单元格文本仍然是空白的。
我希望绑定值 PNummer、Firstname、Lastname 显示在单元格中,如模板中所示。
我想尝试但还没有机会或不知道如何尝试的事情:
- 使用示例产品集合
- 在绑定上使用格式化程序来查看实际到达单元格的内容(我的同事建议这样做)。我还不知道在这种情况下该怎么做。
任何帮助将不胜感激。
干杯
将列添加到 table 然后您可以在 table.
中看到具有实际值的行
var oColumn = new sap.ui.table.Column({
label: new sap.m.Label({text: "PNumber"}),
template: new sap.m.Text({text: "{PNumber}"}),
width: "100px"
});
if (oTable.bindRows) {
oTable.addColumn(oColumn);
oTable.bindAggregation("rows", "/");
}
出于某种原因,在值帮助对话框的 xml 视图弹出窗口片段中定义一个 table,该片段低于实际内部 table 导致问题得到修复,即使在我删除了 table 并且代码与它仍然无法正常工作时的代码基本相同。关于为什么会这样的任何想法?我很想知道这个问题。
我对编码和 Whosebug 还很陌生。我正在尝试创建一个 sapui5 值帮助对话框 (class sap.ui.comp.valuehelpdialog.ValueHelpDialog
),它应该最终过滤来自 SAP 后端服务中用户 table 的搜索请求。
现在,我什至无法让它正确显示我的模拟数据。模拟数据由一个 "Personen.json" 和一组用户组成,这些用户具有以下字段,例如此示例片段:
[{
"BewId": "2123456789",
"Posno": 1,
"PNumber": "P87879876",
"Firstname": "Heinz",
"Company": "Some company",
"IsIntern": true,
"Lastname": "Wolff"
}, {
"BewId": "2123456789",
"Posno": 2,
"PNumber": "P23498711",
"Firstname": "Karl",
"Company": "some company",
"IsIntern": true,
"Lastname": "Schmidt"
}]
我几乎尝试了所有我能想到的方法:
- 在单元格的文本字段中放置文字值而不是绑定。
- 使用
getTableAsync().then
代替getTable()
。 - 各种不同的路径,包括整个文件夹树的完整路径和
/Personen
(我认为 JSON 的当前结构没有意义)。 - 使用
bindRows()
而不是bindAggregation()
。 - 用
sap.m.Table
而不是sap.ui.table.Table
在根视图上创建一个正常的 table (据我所知,这是 ValueHelpDialog 内部 table 的类型可以说)。这显示数据没有问题。 - 更改我的 Personen.json 的语法以在其中包含一个集合
Personen
并在绑定函数中将路径更改为/Personen
。 - Following the example from the sample 尽可能接近。
用
addColumn()
在控制器中定义列结构,而不是像我现在这样在模型中定义它:"columnModel.json" {cols": [ { "label": "{i18n>pNumber}", "template": "{PNumber}" }, { "label": "{i18n>firstname}", "template": "{Firstname}" }, { "label": "{i18n>lastname}", "template": "{Lastname}" }]}
Bellow 是我的主视图控制器中按下帮助值的事件处理函数:
handleValueHelp: function () {
var oColModel = this.getView().getModel("columnsModel");
var oUserModel = this.getView().getModel("userModel");
this._oValueHelpDialog = sap.ui.xmlfragment("appName.view.ValueHelpPopover", this);
this.getView().addDependent(this._oValueHelpDialog);
var oTable = this._oValueHelpDialog.getTable();
oTable.setModel(oUserModel);
oTable.setModel(oColModel, "columns");
var oTemplate = new sap.m.ColumnListItem({
type: sap.m.ListType.Active,
cells: [
new sap.m.Label({
text: "{PNumber}"
}),
new sap.m.Label({
text: "{Firstname}"
}),
new sap.m.Label({
text: "{Lastname}"
})
]
});
if (oTable.bindRows) {
oTable.bindAggregation("rows", "/");
}
if (oTable.bindItems) {
oTable.bindAggregation("items", "/", oTemplate);
}
this._oValueHelpDialog.update();
this._oValueHelpDialog.open();
}
我的 XML ValueHelpDialog 视图片段:
"ValueHelpPopover.fragment.xml"
<core:FragmentDefinition xmlns:vhd="sap.ui.comp.valuehelpdialog" xmlns:core="sap.ui.core" xmlns="sap.m">
<vhd:ValueHelpDialog id="valueHelp" title="{i18n>valueHelpTitle}" ok=".onValueHelpOkPress" cancel=".onValueHelpCancelPress"
afterClose=".onValueHelpAfterClose" key="Firstname" descriptionKey="Lastname"></vhd:ValueHelpDialog>
目前,我没有收到任何错误消息,但我收到了以下输出:https://ibb.co/q58sk1V 当我 select 这些行时,我可以从键中看出它们是来自我的模拟 json odata 模型的对象,但单元格文本仍然是空白的。
我希望绑定值 PNummer、Firstname、Lastname 显示在单元格中,如模板中所示。
我想尝试但还没有机会或不知道如何尝试的事情:
- 使用示例产品集合
- 在绑定上使用格式化程序来查看实际到达单元格的内容(我的同事建议这样做)。我还不知道在这种情况下该怎么做。
任何帮助将不胜感激。
干杯
将列添加到 table 然后您可以在 table.
中看到具有实际值的行 var oColumn = new sap.ui.table.Column({
label: new sap.m.Label({text: "PNumber"}),
template: new sap.m.Text({text: "{PNumber}"}),
width: "100px"
});
if (oTable.bindRows) {
oTable.addColumn(oColumn);
oTable.bindAggregation("rows", "/");
}
出于某种原因,在值帮助对话框的 xml 视图弹出窗口片段中定义一个 table,该片段低于实际内部 table 导致问题得到修复,即使在我删除了 table 并且代码与它仍然无法正常工作时的代码基本相同。关于为什么会这样的任何想法?我很想知道这个问题。