#angularjs #twitter-bootstrap #html-table #servicenow #collapsable
#angularjs #twitter-bootstrap #html-таблица #servicenow #сворачиваемый
Вопрос:
Наша команда пытается создать виджет в 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>
Приведенный выше код выдает следующее (что, очевидно, неверно):
Я знаю, что вместо того, чтобы сворачиваемый div должен находиться в 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>
Чего нам не хватает, чтобы это работало правильно?
Комментарии:
1. (1) Ничего не является «очевидным». Объясните, почему это неверно. (2) html-теги в вашем сообщении не отображаются. Прямо сейчас он говорит «Я знаю, что вместо того, чтобы сворачиваемый div должен быть в »
Ответ №1:
Я вижу ng-click="expand(item)"
в комментарии за html-элементом, но я не вижу, чтобы он действительно появлялся в элементе, поэтому эта функция никогда не будет вызвана при нажатии.
data-toggle
Будет недостаточно изменить значение item.showDescriptor
на true или false (что прямо сейчас, похоже, data-toggle
является единственной вещью, пытающейся управлять отображением)… Я также не уверен, что href для 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>