代码之家  ›  专栏  ›  技术社区  ›  Dave

可折叠表行的问题

  •  0
  • Dave  · 技术社区  · 6 年前

    我们的团队正在尝试在ServiceNow中创建一个具有可展开/可折叠行的小部件。我们很难让它正常工作。以下是我们目前的代码:

    <table class="table table-responsive">
      <thead>
        <tr>
          <th></th>
          <th ng-repeat="field in data.fields_array track by $index" ng-click="setOrderBy(field)" tabindex="0">
            <div class="th-title" aria-label="${Sort by } {{data.column_labels[field]}}">{{data.column_labels[field]}}
              <i class="fa" ng-if="field == data.o" ng-class="{'asc': 'fa-chevron-up', 'desc': 'fa-chevron-down'}[data.d]" aria-label="${Sorted by } {{data.column_labels[field]}} {{data.d == 'asc' ?  '${Ascending}': '${Descending}' }}"></i>
            </div>
          </th>
        </tr>
      </thead>
      <tbody>
        <tr ng-repeat="item in data.list track by item.sys_id" data-toggle="collapse" href="#{{item.pcs_task_type_sysID}}" aria-expanded="true" aria-controls="collapseOne" role="button">  <!--ng-click="expand(item)" class="clickableTableRow" -->   
          <td>
            <i ng-if="field[$index] == field[0]" ng-class="{'pull-center text-success glyphicon glyphicon-check' : item.completed !='Not Completed','text-danger glyphicon glyphicon-warning-sign' : item.completed == 'Not Completed'}"></i>
          </td>
          <td role="text" aria-label="{{item[field].display_value}}" class="pointer" ng-class="{selected: item.selected}" ng-repeat="field in ::data.fields_array track by $index" data-field="{{::field}}" data-th="{{::data.column_labels[field]}}">
            {{::item[field].display_value}}
          </td>
          <td>
            <div id="{{item.pcs_task_type_sysID}}" class="collapse">
              <sp-widget widget="item.widget"></sp-widget>
            </div>
          </td>
        </tr>
      </tbody>
    </table>
    

    上面的代码生成以下内容(这显然是错误的):

    enter image description here

    我知道,可折叠div应该在a中,而不是在a中,但是当我将其向下移动到自己的行(如下所示)时,新行根本不会展开。

    <table class="table table-responsive">
          <thead>
            <tr>
              <th></th>
              <th ng-repeat="field in data.fields_array track by $index" ng-click="setOrderBy(field)" tabindex="0">
                <div class="th-title" aria-label="${Sort by } {{data.column_labels[field]}}">{{data.column_labels[field]}}
                  <i class="fa" ng-if="field == data.o" ng-class="{'asc': 'fa-chevron-up', 'desc': 'fa-chevron-down'}[data.d]" aria-label="${Sorted by } {{data.column_labels[field]}} {{data.d == 'asc' ?  '${Ascending}': '${Descending}' }}"></i>
                </div>
              </th>
            </tr>
          </thead>
          <tbody> <!-- id="{{item.sys_id}}_task_body" class="panel-collapse collapse in dataBlock"-->
            <tr ng-repeat="item in data.list track by item.sys_id" data-toggle="collapse" href="#{{item.pcs_task_type_sysID}}" aria-expanded="true" aria-controls="collapseOne" role="button">  <!--ng-click="expand(item)" class="clickableTableRow" -->   
              <td>
                <i ng-if="field[$index] == field[0]" ng-class="{'pull-center text-success glyphicon glyphicon-check' : item.completed !='Not Completed','text-danger glyphicon glyphicon-warning-sign' : item.completed == 'Not Completed'}"></i>
              </td>
              <td role="text" aria-label="{{item[field].display_value}}" class="pointer" ng-class="{selected: item.selected}" ng-repeat="field in ::data.fields_array track by $index" data-field="{{::field}}" data-th="{{::data.column_labels[field]}}">
                {{::item[field].display_value}}
              </td>
            </tr>
            <tr>
              <td>
                <div id="{{item.pcs_task_type_sysID}}" class="collapse"><!--ng-if="item.showDescriptor" -->
                  <sp-widget widget="item.widget"></sp-widget>
                </div>
              </td>
            </tr>
          </tbody>
        </table>
    

    我们缺少什么才能让它正常工作?

    0 回复  |  直到 6 年前
        1
  •  0
  •   Katherine R    6 年前

    我懂了 ng-click="expand(item)" 在html元素后面的注释中,但我看不到它实际出现在元素中,因此在单击时永远不会调用该函数。

    这个 data-toggle 将不足以更改 item.showDescriptor 是真是假(现在看来 数据切换 是唯一试图控制显示的东西。。。我也不确定 tr 元素将成功。。。

    <tr ng-repeat="item in data.list track by item.sys_id">
    <td>
    <span ng-click="expand(item)">
    <i ng-class="{'pull-center text-success glyphicon glyphicon-check' : item.completed !='Not Completed','text-danger glyphicon glyphicon-warning-sign' : item.completed == 'Not Completed'}"></i>
    Click me to expand
    </span>
    </td>
    <td>
    <span ng-if="item.showDescriptor">
    I should conditionally show
    </span>
    </td>
    </tr>