Функция привязки срабатывает несколько раз / KnockOut - PullRequest
0 голосов
/ 03 ноября 2019

Я новичок в KnockOut, и мне дали проект, использующий его для создания модального стиля. Есть панель поиска, в которой вы можете найти имя пользователя и добавить его в список. Вот код для добавления пользователя:

                    // binding when a user is selected 
                $('#addUser').bind('typeahead:select', function (event, suggestion) {
                    debugger;
                    var userNameValue = $('#addUser').val(); 
                    var userFromArray = $.grep(self.userNameList(), function (user) { return ko.utils.unwrapObservable(user.value) == userNameValue });
                    // cannot add several times a same user 
                    if (self.userToAdd() && userNameValue != "") {
                        if (userFromArray.length >= 0) {
                            if ($.grep(self.editingUserList.userKeyValues(), function (user) { return ko.utils.unwrapObservable(user.value) == userNameValue }).length == 0) {
                                self.editingUserList.userKeyValues.push(new roleKeyValueModel(userFromArray[0].key, userFromArray[0].value, userFromArray[0].role));
                            } else {
                                jAlertBox('"' + userNameValue + '" @(Resources.IsAlreadyAdded)', "", "info");
                            }
                        } else {
                            debugger;
                            jAlertBox('"' + userNameValue + '" @(Resources.IsUnknown)', "", "warning");
                        }
                    }
                    self.userToAdd("");
                    $('#addUser').typeahead('val', '');
                });

Он отлично работает, когда я открываю первый модальный. Однако, , когда я закрываю его и открываю второй модальный , эта функция запускается несколько раз и не может добавить ни одного пользователя (при первом запуске она обнаруживает правильного пользователя, но при втором запуске отправляется пустое имя пользователя,что мешает правильному завершению функции).

Не могли бы вы помочь мне и указать, что не так? Я проверил несколько часов ...

Я могу добавить больше кода, если вам нужно.

Редактировать: , чтобы быть более точным, привязка срабатывает три раза, если модал был открыт 3 раза, 4 раза, если он был открыт 4 раза, и т. Д ...

1 Ответ

0 голосов
/ 03 ноября 2019

Мне удалось решить эту проблему путем добавления уникального идентификатора в ('#addUser'). Вот так:

@{ Guid uniqueId = Guid.NewGuid(); } 

(...)

 <form>
        <div class="shareSearchBar">
            <i class="fa fa-search" aria-hidden="true"></i>
            <input id="addUser_@(uniqueId)" class="typeahead" placeholder="Add a user" data-bind='value: userToAdd, valueUpdate: "keyup"' />
        </div>
    </form>

(...)

И изменение модов из #addUser на новую версию с Id. Я полагаю, этот элемент не был правильно очищен / отменен при закрытии модального окна.

...