[英]SAP UI5 - How to disable a row in sap.m.Table Multiselect table based on row status
我有一個棘手的問題。 我想禁用行選擇是sap.m.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 內部有面板 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,那么根據 Table id
,我可以獲取行數據,並且可以禁用該行。 但是這里會動態生成多個表,所以我不能給出表的 ID。
有人可以幫助我如何禁用基於checkDuplicate
布爾值的行嗎?
先感謝您
將事件modelContextChange的事件偵聽器添加到您的表中。
在此對象上更改模型或上下文時觸發(通過調用 setModel/setBindingContext 或由於傳播)
<Table id="productsTable"
modelContextChange=".onModelContextChange"
items="{dataModel>productsList}"
sticky="ColumnHeaders"
mode="MultiSelect"
>
...
</Table>
該事件包含當前表的參數“id”。 這樣,您可以通過其完整的 id 檢索當前表,並在稍作更改后重新使用您的代碼。
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);
}
});
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.