Вы не можете применять привязки несколько раз к одному и тому же выбиванию элемента - PullRequest
0 голосов
/ 12 июня 2018

Я знаю, что этот вопрос задавался ранее, но использование cleanNode не устранило проблему.

Мне нужно отобразить список идентификаторов ордеров, которые хранятся в массиве. Вот что я делал до сих пор:

     self.Orders = ko.observableArray([]);
 for (var i = 0; i <= self.OrdersIds().length; i++) {                                  
    //ko.cleanNode($("#Table"));
     ko.applyBindings({ Orders: [{ orderId : self.OrdersIds()[i] }] }, document.getElementById("oTable"));
            }

    <table id="commentsTable">
        <tbody data-bind="foreach: Orders">
            <tr>
                <td data-bind="text: orderIdt"></td>

            </tr>
        </tbody>
    </table>

1 Ответ

0 голосов
/ 12 июня 2018

Когда вы делаете ko.applyBindings без передачи идентификатора элемента, модель автоматически применяется ко всему документу.

Вы можете передать в функцию applyBindings второй аргумент - элемент html, к которому вы хотите применить привязки.В вашем случае:

ko.applyBindings({ Orders: this.Orders }, document.getElementById('oTable'));

Это сопоставит каждое свойство (рекурсивное) в вашей модели (Заказы) с HTML-таблицей «Таблица».И после этого вы можете изменить свою модель Orders js (добавить / удалить элементы из массива), и все это будет отражено в вашем html.

Ваш пример не совсем корректен, потому что вы пренебрегаете основным преимуществом нокаута (я имею в виду наблюдаемые).Когда вы создаете свою модель таким способом Orders: [{orderId: self.OrdersIds () [i]} - это больше не действует как наблюдаемый массив, и HTML не может реагировать на изменения модели.

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