SAP UI5 - 如何根据行状态禁用 sap.m.Table 多选表中的一行

我有一个棘手的问题。我想禁用行选择是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 有一个 Products 数组 2)VBox 里面有 Panel 3)Inside Panel,在 Panel Content 中,我已经给出了sap.m.Table,这意味着可能有多个表将根据来自后端的数据生成。


现在我的要求是如何根据中的布尔值禁用一行checkDuplicate?


下面是我的控制器逻辑,我正在尝试...


var tbl = self.getView().byId('productsTable');

var header = tbl.$().find('thead');

var selectAllCb = header.find('.sapMCb');

selectAllCb.remove();

});

上述逻辑的问题是,如果只有一个 Table ,那么基于 Table id,我可以获取行数据,我可以禁用该行。但是这里会动态生成多个表,所以我不能为表提供 ID。


有人可以帮我如何根据checkDuplicate布尔值禁用该行吗?


先感谢您


开心每一天1111
浏览 162回答 1
1回答

缥缈止盈

将事件modelContextChange的事件侦听器添加到您的表中。在此对象上更改模型或上下文时触发(通过调用 setModel/setBindingContext 或由于传播)<Table id="productsTable"&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;modelContextChange=".onModelContextChange"&nbsp; &nbsp; &nbsp; &nbsp;items="{dataModel>productsList}"&nbsp; &nbsp; &nbsp; &nbsp;sticky="ColumnHeaders"&nbsp; &nbsp; &nbsp; &nbsp;mode="MultiSelect">...</Table>该事件包含当前表的参数“id”。这样,您可以通过其完整 id 检索当前表,并通过微小的更改重新使用您的代码。onModelContextChange: function(oEvent) {&nbsp; &nbsp; var sId = oEvent.getParameter("id");&nbsp; &nbsp; var tbl = sap.ui.getCore().byId(sId);&nbsp; &nbsp; var header = tbl.$().find('thead');&nbsp; &nbsp; var selectAllCb = header.find('.sapMCb');&nbsp; &nbsp; selectAllCb.remove();&nbsp; &nbsp; tbl.getItems().forEach(function (r) {&nbsp; &nbsp; &nbsp; &nbsp; var obj = r.getBindingContext("dataModel").getObject();&nbsp; &nbsp; &nbsp; &nbsp; var oStatus = obj.checkDuplicate;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; var cb = r.$().find('.sapMCb');&nbsp; &nbsp; &nbsp; &nbsp; var oCb = sap.ui.getCore().byId(cb.attr('id'));&nbsp; &nbsp; &nbsp; &nbsp; if (oStatus == "true") {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; oCb.setEnabled(true);&nbsp; &nbsp; &nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; oCb.setEnabled(false);&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; });}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript