SAP UI5 - 如何根据行状态禁用 sap.m.Table Multiselect table 中的行
SAP UI5 - How to disable a row in sap.m.Table Multiselect table based on row status
我有一个棘手的问题。我要禁用的行选择是 sap.m.Table
。但是 Table 在 Panel
内容
中可用
<VBox items="{dataModel>/Products}">
<Panel expandable="true" id="testPanel" expanded="false" width="auto" class="sapUiResponsiveMargin">
<headerToolbar>
<Toolbar style="Clear">
<Text text="{dataModel>productText}"></Text>
</Toolbar>
</headerToolbar>
<content>
<Table id="productsTable" items="{dataModel>productsList}" id="skillsTable" visible="true" sticky="ColumnHeaders"
mode="MultiSelect">
<columns>
<Column>
<Text text="Product Name"/>
</Column>
<Column>
<Text text="Product No"/>
</Column>
<Column>
<Text text="Asset"/>
</Column>
<Column>
<Text text="Check Duplicate"/>
</Column>
</columns>
<items>
<ColumnListItem >
<cells>
<Text text="{dataModel>productName}"/>
<Text text="{dataModel>productNo}"/>
<Text text="{dataModel>asset}"/>
<Text text="{dataModel>checkDuplicate}"/>
</cells>
</ColumnListItem>
</items>
</Table>
</content>
</Panel>
</VBox>
如果你看到上面的代码,有3点...
1)VBox有一系列的产品
2)VBox里面有Panel
3)在面板内部,在面板内容中,我给出了sap.m.Table
,这意味着可能会根据来自后端的数据生成多个表格。
现在我的要求是如何根据 checkDuplicate
中的布尔值禁用一行?
下面是我的控制器逻辑,我正在尝试...
var tbl = self.getView().byId('productsTable');
var header = tbl.$().find('thead');
var selectAllCb = header.find('.sapMCb');
selectAllCb.remove();
tbl.getItems().forEach(function (r) {
var obj = r.getBindingContext("dataModel").getObject();
var oStatus = obj.checkDuplicate;
var cb = r.$().find('.sapMCb');
var oCb = sap.ui.getCore().byId(cb.attr('id'));
if (oStatus == "true") {
oCb.setEnabled(true);
} else {
oCb.setEnabled(false);
}
});
上面逻辑的问题是,如果只有一个Table,那么根据Tableid
,我可以得到行数据,我可以禁用排。但是这里会动态生成多个 Table,所以我无法为 Table.
提供 ID
有人可以帮助我如何根据 checkDuplicate
布尔值禁用该行?
提前致谢
将事件 modelContextChange 的事件侦听器添加到您的 table。
Fired when models or contexts are changed on this object (either by calling setModel/setBindingContext or due to propagation)
<Table id="productsTable"
modelContextChange=".onModelContextChange"
items="{dataModel>productsList}"
sticky="ColumnHeaders"
mode="MultiSelect"
>
...
</Table>
事件包含当前table的参数"id"。这样,您可以通过其完整 ID 检索当前的 table,并通过较小的更改重新使用您的代码。
onModelContextChange: function(oEvent) {
var sId = oEvent.getParameter("id");
var tbl = sap.ui.getCore().byId(sId);
var header = tbl.$().find('thead');
var selectAllCb = header.find('.sapMCb');
selectAllCb.remove();
tbl.getItems().forEach(function (r) {
var obj = r.getBindingContext("dataModel").getObject();
var oStatus = obj.checkDuplicate;
var cb = r.$().find('.sapMCb');
var oCb = sap.ui.getCore().byId(cb.attr('id'));
if (oStatus == "true") {
oCb.setEnabled(true);
} else {
oCb.setEnabled(false);
}
});
}
我有一个棘手的问题。我要禁用的行选择是 sap.m.Table
。但是 Table 在 Panel
内容
<VBox items="{dataModel>/Products}">
<Panel expandable="true" id="testPanel" expanded="false" width="auto" class="sapUiResponsiveMargin">
<headerToolbar>
<Toolbar style="Clear">
<Text text="{dataModel>productText}"></Text>
</Toolbar>
</headerToolbar>
<content>
<Table id="productsTable" items="{dataModel>productsList}" id="skillsTable" visible="true" sticky="ColumnHeaders"
mode="MultiSelect">
<columns>
<Column>
<Text text="Product Name"/>
</Column>
<Column>
<Text text="Product No"/>
</Column>
<Column>
<Text text="Asset"/>
</Column>
<Column>
<Text text="Check Duplicate"/>
</Column>
</columns>
<items>
<ColumnListItem >
<cells>
<Text text="{dataModel>productName}"/>
<Text text="{dataModel>productNo}"/>
<Text text="{dataModel>asset}"/>
<Text text="{dataModel>checkDuplicate}"/>
</cells>
</ColumnListItem>
</items>
</Table>
</content>
</Panel>
</VBox>
如果你看到上面的代码,有3点...
1)VBox有一系列的产品
2)VBox里面有Panel
3)在面板内部,在面板内容中,我给出了sap.m.Table
,这意味着可能会根据来自后端的数据生成多个表格。
现在我的要求是如何根据 checkDuplicate
中的布尔值禁用一行?
下面是我的控制器逻辑,我正在尝试...
var tbl = self.getView().byId('productsTable');
var header = tbl.$().find('thead');
var selectAllCb = header.find('.sapMCb');
selectAllCb.remove();
tbl.getItems().forEach(function (r) {
var obj = r.getBindingContext("dataModel").getObject();
var oStatus = obj.checkDuplicate;
var cb = r.$().find('.sapMCb');
var oCb = sap.ui.getCore().byId(cb.attr('id'));
if (oStatus == "true") {
oCb.setEnabled(true);
} else {
oCb.setEnabled(false);
}
});
上面逻辑的问题是,如果只有一个Table,那么根据Tableid
,我可以得到行数据,我可以禁用排。但是这里会动态生成多个 Table,所以我无法为 Table.
有人可以帮助我如何根据 checkDuplicate
布尔值禁用该行?
提前致谢
将事件 modelContextChange 的事件侦听器添加到您的 table。
Fired when models or contexts are changed on this object (either by calling setModel/setBindingContext or due to propagation)
<Table id="productsTable"
modelContextChange=".onModelContextChange"
items="{dataModel>productsList}"
sticky="ColumnHeaders"
mode="MultiSelect"
>
...
</Table>
事件包含当前table的参数"id"。这样,您可以通过其完整 ID 检索当前的 table,并通过较小的更改重新使用您的代码。
onModelContextChange: function(oEvent) {
var sId = oEvent.getParameter("id");
var tbl = sap.ui.getCore().byId(sId);
var header = tbl.$().find('thead');
var selectAllCb = header.find('.sapMCb');
selectAllCb.remove();
tbl.getItems().forEach(function (r) {
var obj = r.getBindingContext("dataModel").getObject();
var oStatus = obj.checkDuplicate;
var cb = r.$().find('.sapMCb');
var oCb = sap.ui.getCore().byId(cb.attr('id'));
if (oStatus == "true") {
oCb.setEnabled(true);
} else {
oCb.setEnabled(false);
}
});
}