簡體   English   中英

SAP UI5 - 如何根據行狀態禁用 sap.m.Table Multiselect 表中的行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM