为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

开心每一天1111 2022-01-13 11:03:30
我有一个棘手的问题。我想禁用行选择是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布尔值禁用该行吗?先感谢您
查看完整描述

1 回答

?
缥缈止盈

TA贡献2041条经验 获得超4个赞

将事件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);

        }

    });

}


查看完整回答
反对 回复 2022-01-13
  • 1 回答
  • 0 关注
  • 161 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信