我使用了具有属性initiallyVisibleFields的SmartTable。我绑定了ODataModel。问题是当我想显示ODataModel的所有字段时,例如在我单击SmartTable的行并尝试在对话框中显示它之后。我只是看到initialVisibleFields属性的字段。看起来ODataModel是使用initialVisibleFields属性过滤的。
我在考虑JSONModel,在将ODataModel的副本绑定到SmartTable之前将其放置在其中,但是我计划使用SmartFilterBar,因此表中显示数据的索引将在过滤后更改。所以我不能简单地从JSONModel中提取数据。我仍然可以根据我从中获得的字段来过滤JSONModel中的数据 ODataModel使用initialVisibleFields进行了过滤,但是在这里我仍然可以获得不同的数据,因为隐藏的字段可能有所不同。
请,您能建议我如何解决此问题吗?
感谢任何提示。
...
return Controller.extend("ABC.View1", {
oDialog: null,
onInit: function() {
var oModel, oView;
oModel = new ODataModel("/sap/opu/odata/sap/ABC/", {
useBatch: false
});
oView = this.getView();
oView.setModel(oModel);
this._createSmartTable();
},
_createSmartTable: function() {
var oSmartTable = new SmartTable('idSmartTable',{
entitySet: "ABCListSet",
tableType: "ResponsiveTable",
sStyleClass: "sapUiResponsiveContentPadding",
initiallyVisibleFields: "A,B,C,D",
showRowCount: false,
enableAutoBinding: true,
demandPopin: false,
useVariantManagement: false,
useExportToExcel: false,
useTablePersonalisation: true,
});
// Register event row click
var that = this;
var oTable = oSmartTable.getTable();
oSmartTable.attachDataReceived(function() {
var aItems = oTable.getItems();
if (aItems.length === 0) return;
$.each(aItems, function(oIndex, oItem) {
oItem.detachPress(that._createDialog);
oItem.setType("Active");
oItem.attachPress(that._createDialog);
});
});
var oVBox = new VBox();
oVBox.addItem(oSmartTable);
var oPage = this.getView().byId("idPage");
oPage.addContent(oVBox);
},
_createDialog: function(oEvent) {
//HERE I the oEvent has data filtered by initiallyVisibleFields property of Smarttable.
},
});
...
答案 0 :(得分:0)
我是否正确理解您要在对话框中显示完整条目的信息? SmartTable使用$select
语句仅加载表中也显示的实体的字段。如果要全部加载,我认为您应该将它们添加到requestAtLeast
属性中。