智能表的属性最初为VisibleFields + ODataModel

时间:2018-12-17 10:04:01

标签: sapui5

我使用了具有属性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.
    },

});
...

1 个答案:

答案 0 :(得分:0)

我是否正确理解您要在对话框中显示完整条目的信息? SmartTable使用$select语句仅加载表中也显示的实体的字段。如果要全部加载,我认为您应该将它们添加到requestAtLeast属性中。