ui-tree-node не перетаскивается и ошибка не может прочитать свойство '0' с нулевым значением
Я получаю эту ошибку;Cannot read property '0' of null
(для '0', '1', '2', '3'..... и т. д.) один раз за каждые 24 часа моего дня. Затем снова для строк "8", "9", "10" и "11", где у меня есть события в календаре.
Это мой шаблон просмотра календарного дня
<table ui-tree="treeOptions">
<tbody>
<!-- Builds Day View with one <tr> for each hour(24 hrs) in rows model -->
<tr ng-repeat="tm in rows track by $index" ng-model="rows" ui-tree-nodes="">
<td class="calendar-cell" ui-tree-node>
<!-- hourTouch() counts the touch events, once shows <p>Signup</p>, twice -->
<!-- shows <div class="finish-time"> which is my draggable element -->
<!-- tm.events is an array of objects with the event detail properties -->
<div class="add_event_shade"
ng-if="tm.events"
on-touch="hourTouch($event)"
ng-model="tm.events"
ui-tree-nodes="">
<p style="display:none;"
ng-model="volunteerStart">
Signup
</p>
<div class="finish-time"
style="display:none";
ui-tree-node>
Finish: {{ displayEnd}}
</div>
</div>
<div ng-class="{'calendar-event-wrap': tm.events}"
ng-show="tm.events">
<!-- adds events to the calendar day view -->
<div ng-repeat="displayEvent in tm.events"
class="calendar-event"
ng-click="eventSelected({event:displayEvent.event})"
<div class="calendar-event-inner"></div>
</div>
</div>
</td>
</tr>
</tbody>
</table>
в моем контроллере у меня есть логика, описанная в моих комментариях HTML и полный набор $scope.treeOptions = { accept, beforeDrag, removed
и т. д., как показано в документах.
Я что-то упускаю из-за того, что мне нужно работать на стороне контроллера, или я неправильно устанавливаю атрибуты дерева пользовательского интерфейса в шаблоне?
2 ответа
<table ui-tree="treeOptions">
<tbody ui-tree-nodes data-max-depth="2" ng-model="row">
<!-- Builds Day View with one <tr> for each hour(24 hrs) in rows model -->
<tr ng-repeat="tm in rows track by $index" ng-model="rows" ui-tree-node>
<td class="calendar-cell">
<!-- hourTouch() counts the touch events, once shows <p>Signup</p>, twice -->
<!-- shows <div class="finish-time"> which is my draggable element -->
<!-- tm.events is an array of objects with the event detail properties -->
<div class="add_event_shade"
ng-if="tm.events"
on-touch="hourTouch($event)"
ng-model="tm.events"
ui-tree-nodes="">
<p style="display:none;"
ng-model="volunteerStart">
Signup
</p>
<div class="finish-time"
style="display:none";
ui-tree-node>
Finish: {{ displayEnd}}
</div>
</div>
<div ng-class="{'calendar-event-wrap': tm.events}"
ng-show="tm.events">
<!-- adds events to the calendar day view -->
<div ng-repeat="displayEvent in tm.events"
class="calendar-event"
ng-click="eventSelected({event:displayEvent.event})"
<div class="calendar-event-inner"></div>
</div>
</div>
</td>
</tr>
</tbody>
Настройки параметров следующие.
$scope.treeOptions= {
accept: function(sourceNodeScope, destNodesScope, destIndex) {
return sourceNodeScope.$parent.$id === destNodesScope.$id;
},
dropped: function(event) {
return true;
},
beforeDrop: function(event) {
return true;
}
};
Формат данных следующим
$scope.row = [{id:'', ..... //JSON data }]
Я должен был двигаться ng-model="rows" ui-tree-nodes=""
от первой <tr>
вверх к <tbody>
, А потом ui-tree-node
от первой <td>
до его родителя <tr>
Затем дальше вниз двигаться ng-model="tm.events" ui-tree-nodes=""
на <div class="add_event_shade">
до его родителя <td>
и изменить ng-model="tm.events"
в ng-model="rows"
, HTML показан ниже.
это исправляет ошибку, показанную выше, и я могу перетащить элемент. Хотя у меня все еще есть некоторые проблемы с перетаскиваемым элементом, перемещающим мои события в представлении, перетаскиваемый элемент не виден, поскольку он перетаскивается, и я не могу удалить перетаскиваемый элемент. Но я думаю, это вещи для другого вопроса.
<table ui-tree="treeOptions">
<tbody ng-model="rows" ui-tree-nodes="">
<!-- Builds Day View with one <tr> for each hour(24 hrs) in rows model -->
<tr ng-repeat="tm in rows track by $index" ui-tree-node>
<td class="calendar-cell" ng-model="rows" ui-tree-nodes="">
<!-- hourTouch() counts the touch events, once shows <p>Signup</p>, twice -->
<!-- shows <div class="finish-time"> which is my draggable element -->
<!-- tm.events is an array of objects with the event detail properties -->
<div class="add_event_shade"
ng-if="tm.events"
on-touch="hourTouch($event)">
<p style="display:none;"
ng-model="volunteerStart">
Signup
</p>
<div class="finish-time"
style="display:none";
ui-tree-node>
Finish: {{ displayEnd}}
</div>
</div>
<div ng-class="{'calendar-event-wrap': tm.events}"
ng-show="tm.events">
<!-- adds events to the calendar day view -->
<div ng-repeat="displayEvent in tm.events"
class="calendar-event"
ng-click="eventSelected({event:displayEvent.event})"
<div class="calendar-event-inner"></div>
</div>
</div>
</td>
</tr>
</tbody>
</table>