Sapui5 sap.m.table multi复选框使其只读-在条件下+;SAP UI5

Sapui5 sap.m.table multi复选框使其只读-在条件下+;SAP UI5,sapui5,Sapui5,这是我的第一篇文章,感谢你们的工作,太棒了 我有一个sap.m.表sap ui5,我有4条记录 在4个选项中,默认情况下选择了2个,我想根据条件禁用预选一次 我已经尝试了下面的代码,但它不工作,任何输入请 查看 /结果“}”**mode=“MultiSelect”** 控制器逻辑 //--->disable the selected department checkboxes var tbl = that.getView().

这是我的第一篇文章,感谢你们的工作,太棒了

我有一个sap.m.表sap ui5,我有4条记录

在4个选项中,默认情况下选择了2个,我想根据条件禁用预选一次

我已经尝试了下面的代码,但它不工作,任何输入请

查看

/结果“}”**mode=“MultiSelect”** 控制器逻辑

                //--->disable the selected department checkboxes
                var tbl = that.getView().byId('idImpactTable');
                var header = tbl.$().find('thead');
                var selectAllCb = header.find('.sapMCb');
                selectAllCb.remove();

                tbl.getItems().forEach(function(r) {
                var obj = r.getBindingContext("impactModel").getObject();
                var oStatus = obj.COMPLETED;
                var cb = r.$().find('.sapMCb');
                var oCb = sap.ui.getCore().byId(cb.attr('id'));
                    if (oStatus === "X") {
                    oCb.setSelected(true);
                    oCb.setEnabled(false);
                    } else {
                        oCb.setEnabled(false);
                    }
                 });

上次尝试此操作时,我发现在表上使用
updateFinished
事件最简单,然后使用列列表项的内部属性,如下所示:

onTableUpdateFinished: function (oEvent) {
    oEvent.getSource().getItems().forEach(function (item) {
        var data = item.getBindingContext().getObject();
        item._oMultiSelectControl.setEnabled(!data.IsEnabled); //whatever your check is
    });
}
您必须找到一种方法使它们处于禁用状态,但在使用表顶部的
全选
复选框时。我最终扩展了
sap.m.table
来实现这一点,可能有更简单的方法


我的分机是这样的

sap.ui.define([
  "sap/m/Table"
], function(Control) {

  return Control.extend("myapp.controls.MyTable", {
    updateSelectAllCheckbox: function(oEvent) {
        if (this._selectAllCheckBox && this.getMode() === "MultiSelect") {
            var aItems = this.getItems();
            var iSelectedItemCount = this.getSelectedItems().length; 
            var iSelectableItemCount = aItems.filter(function(oItem) {
                //standard table does not check if the item is enabled
                return oItem.getSelected() || oItem._oMultiSelectControl.getEnabled();
            }).length;

            // set state of the checkbox by comparing item length and selected item length
            this._selectAllCheckBox.setSelected(aItems.length > 0 && iSelectedItemCount === iSelectableItemCount);
        }
    }
  });
});
而且只是标准的渲染器

sap.ui.define([
  "sap/m/TableRenderer"
], function(Control) {

  return Control.extend("myapp.controls.MyTableRenderer", {
  });
});

我想我本可以扩展ColumnListItem,但这比我想在表扩展中投入的精力要多

我已经设法找到了解决方案,请找到要实现的示例代码

                //--->disable the selected department checkboxes
                var tbl = that.getView().byId("idImpactTable");
                var header = tbl.$().find("thead");
                var selectAllCb = header.find(".sapMCb");
                selectAllCb.remove();

                var aItems = that.byId("idImpactTable").getItems();
                //---> Check individual item property value and select the item
                aItems.forEach(function(oItem) {
                    debugger;
                    //---> If using OData Model items Binding, get the item object
                    var mObject = oItem.getBindingContext().getObject();
                    var sPath = oItem.getBindingContextPath();
                    var completed = oItem.oBindingContexts.impactModel.getProperty("COMPLETED");

                    //--->get the id of Multi Checkbox
                    var cb = oItem.$().find(".sapMCb");
                    var oCb = sap.ui.getCore().byId(cb.attr("id"));

                    if (completed === "X") {
                        oCb.setEditable(false);
                        oItem.setSelected(true);
                        oItem.getCells()[4].setEnabled(false);
                    } else {
                        oItem.setSelected(false);
                    }
                });
谢谢,,
Jacob.Kata

谢谢你Jorg,非常感谢你的反馈,我已经找到了解决方案。