HTML:
<tbody ng-repeat="row in pagemodel.Tiering|filteraggregator">
<!-- more stuff here... -->
<select class="form-control" name="paramType" ng-change="setParamC(row.RowID)" ng-model="row.ParameterT" ng-options="item.ReferenceValue for item in pagemodel.ParamTList track by $index" required></select>
<select class="form-control" name="paramCat" ng-change="validatePCat(row.RowID)" ng-model="row.ParameterC" ng-options="item.ReferenceValue for item in pagemodel.ParamCList|filter:{ReferenceParentCode:row.ParameterT.ReferenceCode , ReferenceParentDomain:row.ParameterT.ReferenceDomain} track by $index" required></select>
<select class="form-control" name="paramName" ng-change="setParamV(row.RowID,0)" ng-model="row.ParameterN" ng-options="item.ReferenceValue for item in pagemodel.ParamNList|filter:{ReferenceParentCode:row.ParameterC.ReferenceCode , ReferenceParentDomain:row.ParameterC.ReferenceDomain} track by $index" required></select>
</tbody>
Радиально-JS:
tieringController.prototype.setParamC = function(index) {
var scope = angular.element(document.getElementById("frmtiering")).scope();
scope.pagemodel.Tiering[index].ParameterC="";
scope.pagemodel.Tiering[index].ParameterN = "";
scope.pagemodel.Tiering[index].ParameterValue = "";
scope.pagemodel.Tiering[index].ValidatePc = false;
}
tieringController.prototype.validatePCat = function (index) {
// this complex code merely looks for duplicate combinations in the dropdown settings
var scope = angular.element(document.getElementById("frmtiering")).scope();
scope.pagemodel.Tiering[index].ValidatePc = false;
for (var i = 0; i < scope.pagemodel.Tiering.length; i++) {
if (i != index && scope.pagemodel.Tiering[i].IsActive) {
if (scope.pagemodel.Tiering[i].AggregatorName == scope.pagemodel.Tiering[index].AggregatorName
&& scope.pagemodel.Tiering[i].ParameterC == scope.pagemodel.Tiering[index].ParameterC) {
if(scope.pagemodel.Tiering[index].ParameterN !='' && (scope.pagemodel.Tiering[i].ParameterN == scope.pagemodel.Tiering[index].ParameterN)) {
scope.pagemodel.Tiering[index].ValidatePc = true;
scope.submitted = false;
}
}
}
}
}
У меня есть список объектов данных, которые возвращаются с сервера во внешний интерфейс посредством вызова ajax.
Каждый объект содержит три свойства (ParameterT
, ParameterC
и ParameterN
), которые указывают на другие дочерние объекты. Каждое из этих свойств является начальным значением раскрывающегося списка. Чтобы эта привязка работала, мне пришлось добавить track by $index
, но это «сломало» мою фильтрацию.
Я использую фильтрацию для обновления доступных параметров во втором и третьем раскрывающемся списке. Таким образом, настройка первого раскрывающегося списка приводит к тому, что второй раскрывающийся список отображает другой набор параметров посредством фильтрации. Настройка второго раскрывающегося списка приводит к тому, что третий раскрывающийся список отображает другой набор параметров посредством фильтрации.
Это работает правильно, если track by $index
НЕ включено. Когда я включаю track by $index
, фильтрация больше не работает. Первоначальный набор параметров правильно включен в список, но при изменении первого раскрывающегося списка он больше не обновляет набор параметров для второго раскрывающегося списка.
EDIT:
Без track by $index
Вот как выглядят мои выпадающие списки:
<select class="form-control ng-pristine ng-valid ng-valid-required ng-touched" name="paramType" ng-change="setParamC(row.RowID)" ng-model="row.ParameterT" ng-options="item.ReferenceValue for item in pagemodel.ParamTList" required="">
<option value="?" selected="selected"></option>
<option label="Static" value="object:478">Static</option>
<option label="Dynamic" value="object:479">Dynamic</option>
</select>
С track by $index
вот как выглядят мои выпадающие списки:
<select class="form-control ng-pristine ng-valid ng-valid-required ng-touched" name="paramType" ng-change="setParamC(row.RowID)" ng-model="row.ParameterT" ng-options="item.ReferenceValue for item in pagemodel.ParamTList track by $index" required="">
<option label="Static" value="0">Static</option>
<option label="Dynamic" value="0" selected="selected">Dynamic</option>
</select>
вы заметите, что с track by $index
значение моего параметра будет нулевым. Вероятно, поэтому каскадные выпадающие меню не фильтруются правильно.
Так ... я что-то не так сделал?