Sapui5 sap.m.table multi复选框使其只读-在条件下+;SAP UI5
这是我的第一篇文章,感谢你们的工作,太棒了 我有一个sap.m.表sap ui5,我有4条记录 在4个选项中,默认情况下选择了2个,我想根据条件禁用预选一次 我已经尝试了下面的代码,但它不工作,任何输入请 查看 /结果“}”**mode=“MultiSelect”** 控制器逻辑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().
//--->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,非常感谢你的反馈,我已经找到了解决方案。