_.findwhere не работает с ng-repeat в опциях выбора - PullRequest
0 голосов
/ 05 сентября 2018

у меня есть следующий выпадающий код

<select data-role="listview" class="form-control" id="txtUserRole" name="Role" data-ng-model="AddEditUserCtrl.SelectedRoleId" required="required"
        data-ng-disabled="!($root.UserSchoolPermissions.indexOf('User.ChangeRole') > -1) && AddEditUserCtrl.isInEditMode" 
        data-ng-change="AddEditUserCtrl.roleChanged(AddEditUserCtrl.SelectedRoleId)"  
        data-ng-class="{'border-error': AddEditUserCtrl.userForm.Role.$invalid && AddEditUserCtrl.userForm.Role.$error.required  && (!AddEditUserCtrl.userForm.Role.$pristine || submitted)}">
            <option value="" selected class="text-muted">{{'Role' | translate}}</option>
            <option data-ng-repeat="option in AddEditUserCtrl.roles" value="{{option.RoleId}}" title="{{option.RoleName}}" data-ng-selected="{{AddEditUserCtrl.SelectedRoleId == option.RoleId}}">{{option.RoleName | translate}}</option>
</select>

я пытаюсь получить AddEditUserCtrl.SelectedRoleId из ng-модели и передать его в функцию ng-change, чтобы получить объект роли, используя _.findwhere, используя приведенный ниже код JS

 AddEditUserCtrl.roleChanged = function (roleId) {
            
            var selectedrole = _.findWhere(AddEditUserCtrl.roles, {
                RoleId: roleId
            });
            AddEditUserCtrl.user.Role = selectedrole
            }

после отладки я обнаружил, что roleId передается прямо из html, а массив AddEditUserCtrl.roles содержит объект, соответствующий roleId, но он не работает.

проверьте следующий скриншот для моей отладки enter image description here PS: я попытался сделать тег выбора, используя data-ng-options, и это сработало, но мне нужно это с data-neg-repeat на теге option

1 Ответ

0 голосов
/ 05 сентября 2018

Судя по вашему скриншоту, вы пытаетесь сравнить строку и число. roleId, передаваемый в findWhere(), выглядит как строка, но свойство RoleId, с которым вы пытаетесь сопоставить, является числом, поэтому ничто не соответствует. Попробуйте следующее, добавив Unary Plus Operator к строке roleId, поступающей из HTML для преобразования в число:

var selectedrole = _.findWhere(AddEditUserCtrl.roles, {
  RoleId: +roleId
});

Вы также можете использовать Number(roleId) или parseInt(roleId, 10) для преобразования строки в число.

var roles = [
  { RoleId: 1, RoleName: "Teacher" },
  { RoleId: 2, RoleName: "Student" },
  { RoleId: 9, RoleName: "Foo" }
];

function roleChanged(roleId) {
  var selectedRole = _.findWhere(roles, {
    RoleId: +roleId
  });
  
  console.log(selectedRole);
}

roleChanged("9");
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.9.1/underscore.js"></script>

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...